基底付き変数の評価
変数がポインターに基づく場合、その変数は通常の EVAL コマンドを使用したデバッガーによる評価に使用不可である場合があります。基底付きポインター自身が基底付きである場合、または基底付きポインターが参照で渡される入力パラメーターである場合 (CONST キーワードを使用した読み取り専用参照を含む)、これが発生することがあります。
例えば、以下のプログラムで、"basedFld" は、入力パラメーターであるポインター "parmPtr" に基づいています。
/copy myPgmProto
D myPgm pi
D parmPtr *
D basedFld s 5a based(parmPtr)
- ポインターがアドレス指定するデータの表示に説明されている :c または :x 表記を使用して基底付きポインターを評価します。例えば、次のとおりです。
注: このメソッドは、パック、整数、または UCS-2 データなどの自然な表示と似ていない 16 進数表示を持つデータで正しく機能しません。===> eval parmPtr:c ===> eval parmPtr:x - 基底付きポインターを明示的に指定するには、デバッガーの "矢印" 表記を使用します。このメソッドは、変数を変更するためにも使用できます。
===> eval parmPtr->basedFld ===> eval parmPtr->basedFld = 'abcde'
D storage s 5a inz('abcde')
D val s 5a
D basedVal s 5a based(p1)
D p1 s * based(p2)
D p2 s * based(p3)
D p3 s *
D ptr1 s * inz(%addr(storage))
D ptr2 s * inz(%addr(ptr1))
D ptr3 s * inz(%addr(ptr2))
C eval p3 = ptr3
C eval p2 = ptr2
C eval p1 = ptr1
C eval val = basedVal
例えば、basedVal を評価するには、以下のようにします。
===> EVAL p3->p2->p1->basedVal
aaaaaaaa
bbbb
cccc
dddd
a. variable name
b. basing pointer of variable ->
c. basing pointer of basing pointer ->
d. and so on