呼び出しステートメントへのステップイン

次を使用して、呼び出しステートメントへステップインすることができま す。

「モジュール・ソースの表示」画面の F22 (ステップイン) を使って、デバッグ・セッションの呼び出し先プログラム またはプロシージャーにステップインすることができます。 実行する次のステートメントが 別のプログラムまたはプロシージャーへの 呼び出しステートメントの場合には、F22 (ステップイン) を押すことによって 、呼び出し先プログラムまたはプロシージャーの最初の実行可能な ステートメントを実行することができます。 次に、呼び出し先プログラムまたはプロシージャーが 「モジュール・ソースの表示」画面に表示されます。

注:
呼び出し先プログラムまたはプロシージャーは、それが「モジュール・ソースの表示」画面に 表示されるように、それに関連したデバッグ・データを持っていなければ なりません。

もう 1 つの方法として STEP INTO デバッグ・コマンドを使用して、デバッグ・ セッションで呼び出しステートメントをステップイン することができます。 STEP INTO デバッグ・コマンドを使用するためには、 デバッグ・コマンド行に次を入力します。

STEP number-of-statements INTO

と入力します。変数 number-of-statements は、処理が再び停止する前に次のステップで実行するステートメントの数です。 この変数を省略した場合、デフォルトの値は 1 です。

実行されるステートメントの 1 つに呼び出しステートメントが入っている場合には、 デバッガーが呼び出し先プログラムまたはプロシージャーに ステップインします。 呼び出し先プログラムまたはプロシージャーの各ステートメントはステップ でカウントされます。 ステップが呼び出し先プログラムまたはプロシージャーで終了する場合には、 この呼び出し先プログラムまたはプロシージャーが「モジュール・ソースの 表示」画面に表示されます。 例えば、

STEP 5 INTO

とデバッグ・コマンド行に入力すると、 プログラム・オブジェクトの次の 5 つのステートメントが実行されます。 3 番目のステートメントが別のプログラム・オブジェクトに対する CALL 命令である場合には、 呼び出し側プログラム・オブジェクトの 2 つのステートメントが実行され、 呼び出し先プログラム・オブジェクトの最初の 3 つのステートメントが実行されます。

DEBUGEX の例では、プロシージャー c_proc を呼び出す EVAL 命令で STEP INTO を入力した (または F22 を押した) 場合に、C モジュールに ステップインします。

STEP INTO コマンドは、CL CALL コマンドを同様に処理します。 呼び出しの後で、これを利用してプログラムをステップスルーすることができ ます。 ソース・デバッガーを開始した後、 「モジュール・ソースの表示」画面から、次の入力をします。

STEP 1 INTO

これでステップ・カウントは 1 に設定されます。F12 を使ってコマンド行に戻り、次にプログラムを 呼び出します。 プログラムは、デバッグ・データをもつ最初のステートメントで 停止します。

ヒント

サブプロシージャーの実行の直前または直後にデータを表示するためには、 サブプロシージャーを開始および終了するプロシージャー仕様書にブレークポイントを置きます。

F22 を使用した OPM プログラムのステップインの例

この例では、F22 (ステップイン) を使用して プログラム DEBUGEX から OPM プログラム RPGPGM にステップインします。

  1. 「モジュール・ソースの表示」画面が DBGEX のソースを表示します。
  2. CALL 命令の前の最後の実行可能ステートメントである無条件ブレークポイントを 行 102 に設定するために、Break 102 を入力して、 実行キーを押してください。
  3. F3 (プログラム終了) を押して、「モジュール・ソースの表示」画面を終わりにします。
  4. プログラムを呼び出してください。プログラムは 図 113 に示すように ブレークポイント 102 で停止します。
    図 113. RPGPGM にステップインする前の DBGEX の「モジュール・ソースの表示」画面
                                 モジュール・ソースの表示
     PROGRAM:   DEBUGEX        LIBRARY:   MYLIB          MODULE:   DBGEX
         98        * FLD1A は FLD1 のオーバーレイ・フィールドです。FLD1 は 'ABCDE' に
         99        * 初期設定されているので、FLD1A(1) の値は 'A' です。次の
        100        * MOVE 命令の後の FLD1A(1) の値は '1' になります。
        101        *----------------------------------------------------------------
        102       C                   MOVE      '1'           FLD1A(1)
        103
        104        *----------------------------------------------------------------
        105        * 別のプログラム・オブジェクトであるプログラム RPGPGM を
                   * 呼び出します。
        106        *----------------------------------------------------------------
        107       C     PLIST1        PLIST
        108       C                   PARM                    PARM1
        109       C                   CALL      'RPGPGM'      PLIST1
        110
        111        *----------------------------------------------------------------
        112        * メイン・プロシージャーから EXPORTFLD をインポートする C_PROC を
                   * 呼び出します。
                                                                            続く...
     デバッグ . . _________________________________________________________________
    _______________________________________________________________________________
     F3=終了プログラム  F6=停止点の追加/消去  F10=ステップ         F11=変数の表示
     F12=再開           F17=ウォッチ変数      F18=ウォッチの処理   F24=キーの続き
     行 102 が停止点。 
  5. F22 (ステップイン) を押してください。 プログラムの 1 ステートメントが実行され 、図 114 に示すように RPGPGM の「モジュール・ソースの表示」画面が 表示されます。

    この場合、RPGPGM の最初の実行可能ステートメントが処理されてから (行 13)、 プログラムが停止します。

    注:
    F22 を使用する時にはステップスルーするステートメントの数を指定するこ とはできません。 F22 キーを押すと、1 つのステップが実行されます。
図 114. RPGPGM へのステップイン
                             モジュール・ソースの表示
 PROGRAM:   RPGPGM         LIBRARY:   MYLIB
      1        *===================================================================
      2        *  RPGPGM - DEBUGEX によって呼び出されるプログラム。ILE ソース・
      3        *           デバッグ・プログラムの STEP 機能を説明しています。
      4        *
      5        *  このプログラムは DEBUGEX から INPUTPARM を受け取り、
      6        *  それを表示してから戻ります。
      7        *===================================================================
      8
      9       D INPUTPARM       S              4P 3
     10
     11       C     *ENTRY        PLIST
     12       C                   PARM                    INPUTPAEM
     13       C     InputParm     DSPLY
     14       C                   SETON
                                                                                  終わり
 デバッグ . .   ________________________________________________________________________
________________________________________________________________________________________
 F3=終了プログラム  F6=停止点の追加/消去  F10=ステップ        F11=変数の表示
 F12=再開           F17=ウォッチ変数      F18=ウォッチの処理  F24=キーの続き
 行 13 でステップが完了した。 

ILE ソース・デバッガーが OPM プログラムを受け入れるように設定 されていない場合、あるいはデバッグ・データが利用できない場合には、 ソースが利用不能であることを知らせるメッセージを持つ、 ブランクの「モジュール・ソースの表示」画面が表示されます (OPM プログラム が OPTION(*SRCDBG) または OPTION(*LSTDBG) を使用して コンパイルされている場合には、このプログラムにはデバッグ・データがあります)。

サブプロシージャーへのステップインの例

この例では、F22 (ステップイン) を使用してサブプロシージャー Switch に ステップインしますが、これはモジュール DEBUGEX にあります。

  1. 「モジュール・ソースの表示」画面が DBGEX のソースを表示します。
  2. CALLP 命令の前の最後の実行可能ステートメントである行 120 に無条件ブレークポイント を設定するために Break 120 を入力して実行キーを押し てください。
  3. F3 (プログラム終了) を押して、「モジュール・ソースの表示」画面を終わりにします。
  4. プログラムを呼び出してください。プログラムはブレークポイント 119 で停止します。
  5. F22 (ステップイン) を押してください。 呼び出しステートメントが実行されてから、図 115 に示されたように 表示はサブプロシージャーに移動します。RPGPGM の最初の実行可能ステートメントが 処理 (行 13) されてから処理が停止します。
図 115. サブプロシージャー SWITCH へのステップイン
                             モジュール・ソースの表示
 PROGRAM:   DEBUGEX        LIBRARY:   MYLIB          MODULE:   DBGEX
    141
    142        *=============================================================
    143        * サブプロシージャー SWITCH の定義
    144        *=============================================================
    145       P SWITCH          B
    146       D SWITCH          PI
    147       D   PARM                         1A
    148        *---------------------------------------------------------
    149        * デバッグのためのローカル変数の定義
    150        *---------------------------------------------------------
    151       D Local           S              5A      INZ('aaaaa')
    152
    153       C                   IF        Parm = '1'
    154       C                   EVAL      Parm = '0'
    155       C                   ELSE
 デバッグ . . _________________________________________________________________
_______________________________________________________________________________
 F3=終了プログラム  F6=停止点の追加/消去  F10=ステップ          F11=変数の表示
 F12=再開           F17=ウォッチ変数      F18=ウォッチの処理    F24=キーの続き
 行 145 でステップが完了した。