PL/I プログラムの内部マクロ コードのデバッグ

PL/I マクロ言語を本格的に使用する場合や、コードの生成にマクロを広く使用しているプログラムの保守を行う場合、EXEC CICS、EXEC DLI、EXEC SQL などと同じように、生成されたソースのレベルでもデバッグが必要になることがあります。そのような場合は、ここで示す手法を使用して、生成されたコードのすべての行をステップ実行し、変数の値を調査および変更してプログラムの動作を把握することができます。これは、把握または想定していないマクロの動作を検出する場合に特に便利です。生成されたコード レベルでデバッグすることで、動作を正確に理解できます。

マクロ コード内の実際のコードは、PL/I ソース ファイルには含まれていません。ただし、プリプロセス済みのファイルからマクロ コードを利用することができます。マクロに実際に含まれるコードをデバッグするには、プリプロセス済みのファイルをデバッグする必要があります。

デバッグするソース ファイルのプリプロセス済みの出力ファイルを作成し、その出力ファイルをデバッグすることができます。これを行うには、次の設定が必要になります。

プロジェクトに対して -nodebuginfo コンパイラ オプションを設定するには

  1. Visual Studio で、デバッグするプロジェクトを含むソリューションを開きます。
  2. ソリューション エクスプローラーで目的のプロジェクトを右クリックし、[Properties] を選択します。[Properties] ウィンドウが表示されます。
  3. [Compile] タブをクリックします。
  4. [Other options] フィールドに「-nodebuginfo」と入力します。
  5. ツール バーの [Save] をクリックして、プロジェクトに対する変更を保存します。

プロジェクトに対してマクロ プリプロセッサ出力を有効にするには

この手順に従って、デバッグするソース ファイルの出力ファイルを作成します。プリプロセッサ出力ファイルのファイル拡張子は .pp です。

  1. [Pre-Processors] タブをクリックします。
  2. [Preprocessor (Macro)] グループで、[Macro preprocessor output] の値を [Yes] に設定します。

出力ファイルが作成された後については次のとおりです。F10 を押してコードにステップ インし、プリプロセッサ ファイルをデバッグします。CodeWatch デバッグ ウィンドウに、デバッグ対象ソースとしてプリプロセッサ ファイルが表示されます。この出力ファイルには、埋め込まれたマクロ コードが含まれています。

たとえば、プログラム ファイルに次のようなマクロ呼び出しを含む文があるとします。

    x = x + 1; x = x + 2;

    $PGMSG(ADD10);   
    $PGMSG(ADD20);

出力ファイルには、これらのマクロ呼び出しのコードが次のように埋め込まれます。

    x = x + 1; x = x + 2;

      DO;
              /* Tracing Block for: ADD10 */
              put skip list (PreExecution: ADD10");
              call ADD10(x);
              put skip list (Complete: ADD10");
              put skip;
            END;
      DO;
              /* Tracing Block for: ADD20 */
              put skip list (PreExecution: ADD20");
              call ADD20(x);
              put skip list (Complete: ADD20");
              put skip;
            END;

このコードにステップ インし、他のコードと同様にデバッグすることができます。