変数がポインターに基づく場合、その変数は通常の EVAL コマンドを使用したデバッガーによる評価に使用不可である場合があります。基底付きポインター自身が基底付きである場合、または基底付きポインターが参照で渡される入力パラメーターである場合 (CONST キーワードを使用した読み取り専用参照を含む)、これが発生することがあります。
例えば、以下のプログラムで、"basedFld" は、入力パラメーターであるポインター "parmPtr" に基づいています。
/copy myPgmProto D myPgm pi D parmPtr * D basedFld s 5a based(parmPtr)
デバッガーで "basedFld" を評価するには、以下のメソッドのいずれかを使用します。
===> eval parmPtr:c ===> eval parmPtr:x注: このメソッドは、パック、整数、または UCS-2 データなどの自然な表示と似ていない 16 進数表示を持つデータで正しく機能しません。
===> eval parmPtr->basedFld ===> eval parmPtr->basedFld = 'abcde'
変数が 3 レベル以上の基底付き変数を持っている場合、2 番目のメソッドを使用する必要があります。例えば、以下のプログラムで、変数 "basedVal" は、3 レベルの基底付きポインターを持っています。 これは、ポインター "p1" に基づいており、"p1" はポインター "p2" に基づいており、"p2" はさらにポインター "p3" に基づいています。変数 "basedVal" は、単純に "EVAL basedVal" を使用してデバッガーで評価することはできません。
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" などの変数を表示するには、デバッガーの p1->p2->name 表記を使用して、基底付きポインターを明示的に指定します。この表記を使用するには、表示する変数を指定してから、左に向かって作業し、 基底付きポインター名と矢印 (->) を指定します。基底付きポインター自身が基底付きである場合は、2 番目の基底付きポインターと矢印を、以前の基底付きポインターの左に指定します。
例えば、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
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.