PL/I マクロ言語を本格的に使用する場合や、コードの生成にマクロを広く使用しているプログラムの保守を行う場合、EXEC CICS、EXEC DLI、EXEC SQL などと同じように、生成されたソースのレベルでもデバッグが必要になることがあります。そのような場合は、ここで示す手法を使用して、生成されたコードのすべての行をステップ実行し、変数の値の調査や変更を行ってプログラムの動作を把握することができます。これは、把握または想定していないマクロの動作を検出する場合に特に便利です。生成されたコード レベルでデバッグすることで、動作を正確に調べることができます。
マクロ コード内の実際のコードは、PL/I ソース ファイルには含まれていません。ただし、プリプロセス済みのファイルからマクロ コードを利用することができます。マクロに実際に含まれるコードをデバッグするには、プリプロセス済みのファイルをデバッグする必要があります。
デバッグするソース ファイルのプリプロセス済みの出力ファイルを作成し、その出力ファイルをデバッグすることができます。これを行うには、次の設定が必要になります。
この手順に従って、デバッグするソース ファイルの出力ファイルを作成します。プリプロセッサ出力ファイルのファイル拡張子は .pp です。
出力ファイルを指定しない場合は、入力ファイル名が使用されます。詳細については、ヘルプ トピックの「マクロ プリプロセッサ オプション」を参照してください。
出力ファイルが作成された後については次のとおりです。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;
このコードにステップ インし、他のコードと同様にデバッグすることができます。