データおよび式の表示

フィールド、データ構造、および配列の内容を表示したり、式を評価す ることができます。 表示または評価には次の 2 つの方法があります。

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 デバッグ・コマンドが「モジュール・ソースの表示」画面から 入力され、値が単一行に表示できる場合には、メッセージ行に値が 表示されます。 そうでない場合には、これは「評価式」画面に表示されます。

図 116 には、EVAL デバッグ・コマンドを使用して サブフィールド LastName の内容を表示する例です。

図 116. EVAL デバッグ・コマンドを使用したフィールドの表示
                             モジュール・ソースの表示
 PROGRAM:   DEBUGEX        LIBRARY:   MYLIB          MODULE:   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     ' 

図 117 には RPG フィールドのいろいろなタイプの EVAL コマンドの使用例が示されています。 これらのフィールドは 図 125 のソースに基づいています。 ソース・デバッガーのオンライン・ヘルプには追加の例も提供されています。

図 117. モジュール 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'