データおよび式の表示
フィールド、データ構造、および配列の内容を表示したり、式を評価す
ることができます。 表示または評価には次の 2 つの方法があります。
- F11 (変数の表示)
- EVAL デバッグ・コマンド
DS.SUBF 形式の簡単な修飾名の場合は、
次のコマンドのいずれかを使用して、変数を表示または変更することができます。
EVAL SUBF OF DS
EVAL DS.SUBF
複雑な修飾名の場合は、ドット修飾形式の名前を使用します。
EVAL FAMILY.CHILD(2).PETS.PET(3).NAME
EVAL コマンドで使われるフィールドの有効範囲は、ILE C のような言語の
QUAL コマンドを使って定義することができます。ただしこのコマンドは現在、ILE RPG
に適用することはできません。
注: EVAL デバッグ・コマンドには使用可能な外部名がないので、戻り値を表示す
ることができません。
データまたは式を表示する最も簡単な方法は、「モジュール・ソースの表示」画面 で F11 (変数の表示) を使用することです。 F11 (変数の表示) を使ってフィールドを 表示するためには、表示したいフィールドにカーソルを置き、F11 (変数の表示) を 押してください。 フィールドの現在の値は「モジュール・ソースの表示」画面の最下部の メッセージ行に表示されます。
構造、レコード、または配列を評価している場合には、F11 (変数の表示) を押した時に戻されるメッセージが 数行にわたることがあります。 数行にわたるメッセージがテキスト全体のメッセージを示す「評価式」画面 で表示されます。 「評価式」画面でメッセージの表示を済ませたら、実行キーを押して 「モジュール・ソースの表示」画面に戻ります。
EVAL デバッグ・コマンドを使用してデータを表示するためには、デバッグ・コマンド行に
EVAL field-name
と入力します。
変数の field-name は、
表示または評価したいフィールド、データ構造、または配列の名前です。
EVAL デバッグ・コマンドが「モジュール・ソースの表示」画面から
入力され、値が単一行に表示できる場合には、メッセージ行に値が
表示されます。 そうでない場合には、これは「評価式」画面に表示されます。図 1 には、EVAL デバッグ・コマンドを使用して サブフィールド LastName の内容を表示する例です。
図 1. EVAL デバッグ・コマンドを使用したフィールドの表示
モジュール・ソースの表示
プログラム : DEBUGEX ライブラリー: MYLIB モジュール: DBGEX
61 D LastName 10A INZ('Jones ')
62 D FirstName 10A INZ('Fred ')
63
64 *---------------------------------------------------------------------
65 * 呼び出されたプロシージャーと c_proc と switch のプロトタイプの定義
66 *---------------------------------------------------------------------
67 D c_proc PR * EXTPROC('c_proc')
68 D size 10U 0 VALUE
69 D inzval 1A CONST
70
71 D Switch PR
72 D Parm 1A
73
74 *---------------------------------------------------------------------
75 * 非プロトタイプ呼び出しのパラメーターの定義
続く...
デバッグ eval LastName____________________________________________________
_______________________________________________________________________________
F3=終了プログラム F6=停止点の追加/消去 F10=ステップ F11=変数の表示
F12=再開 F17=変数監視 F18=監視の処理 F24=キーの続き
LASTNAME = 'Jones '
図 2 には RPG フィールドのいろいろなタイプの EVAL コマンドの使用例が示されています。 これらのフィールドは 図 1 のソースに基づいています。 また、ソースのオンライン・ヘルプには、追加の例が提供されています。
図 2. モジュール DBGEX に基づくサンプルの EVAL コマンド
スカラー・フィールド RPG 定義
> EVAL String 6A INZ('ABCDEF')
STRING = 'ABCDEF'
> EVAL Packed1D0 5P 2 INZ(-93.4)
PACKED1D0 = -093.40
> EVAL ZonedD3D2 3S 2 INZ(-3.21)
ZONEDD3D2 = -3.21
> EVAL Bin4D3 4B 3 INZ(-4.321)
BIN4D3 = -4.321
> EVAL Int3 3I 0 INZ(-128)
INT3 = -128
> EVAL Int5 5I 0 INZ(-2046)
INT5 = -2046
> EVAL Int10 10I 0 INZ(-31904)
INT10 = -31904
> EVAL Int20 20I 0 INZ(-463972)
INT20 = -463972
> EVAL Unsigned3 3U 0 INZ(128)
UNSIGNED3 = 128
> EVAL Unsigned5 5U 0 INZ(2046)
UNSIGNED5 = 2046
> EVAL Unsigned10 10U 0 INZ(31904)
UNSIGNED10 = 31904
> EVAL Unsigned20 20U 0 INZ(463972)
UNSIGNED20 = 463972
> EVAL DBCSString 3G INZ(G'~BBCCDD~')
DBCSSTRING = '"BBCCDD"'
> EVAL NullPtr * INZ(*NULL)
NULLPTR = SYP:*NULL
基底付きフィールド
> EVAL String 6A INZ('ABCDEF')
STRING = 'ABCDEF'
> EVAL BasePtr * INZ(%ADDR(String))
BASEPTR = SPP:C01947001218
> EVAL BaseString 6A BASED(BasePtr)
BASESTRING = 'ABCDEF'
日付、時刻、タイム・スタンプ・フィールド
> EVAL BigDate D INZ(D'9999-12-31')
BIGDATE = '9999-12-31'
> EVAL BigTime T INZ(T'12.00.00')
BIGTIME = '12.00.00'
> EVAL BigTstamp Z INZ(Z'9999-12-31-12.00.00.000000
BIGTSTAMP = '9999-12-31-12.00.00.000000'