プログラムのデバッグでは、多くの場合、プログラムで使用されるストレージの全部または一部の印刷出力 (ダンプ) を取得すると便利です。ダンプを使って、トレース情報を提供することもできます。トレース情報は、プログラム内のエラーの原因を突き止めるのに役立ちます。
次の 2 種類のダンプが有効です。
IMPRECISE コンパイル時オプションを使用すると、トレース情報が不完全になる可能性があります。IMPRECISE オプションの詳細については、IMPRECISE を参照してください。
PLIDUMP を使用すると、以下の情報を取得できます。
定様式 PL/I ダンプを取得するには、PLIDUMP への呼び出しをプログラムに組み込む必要があります。CALL ステートメントが現れる場所であればどこでも、ステートメント CALL PLIDUMP を置くことができます。書式は以下のとおりです。
call plidump('dump options string', 'dump title string');
PL/I は、オプションを左から右に読み取ります。無効なオプションは無視されます。矛盾するオプションが存在する場合は、右端にあるオプションが採用されます。
プログラムが PLIDUMP を何度も呼び出す場合は、そのたびに異なるユーザー ID 文字ストリングを使うようにしてください。そうすれば、各ダンプが発生した場所を容易に識別できます。このヘッダーのほかに、新たに PLIDUMP が呼び出されるたびに、日付、時刻、およびページ番号 1 を示す見出しがユーザー ID の上に印刷されます。
デフォルトのダンプ・オプションは T、F、および C で、ダンプ・タイトル・ストリングはヌルです。
plidump('TFC', ' ');
PLIDUMP はプログラム内のどこからでも呼び出せますが、通常のデバッグ方法では ON ユニットから PLIDUMP を呼び出します。ダンプ後のプログラム継続はオプションなので、プログラムは PLIDUMP を使用すれば、プログラム実行中に一連のダンプをとることができます。
DD:plidump 環境変数を使用すれば、PLIDUMP 出力を配置する場所を指定できます。例えば、次のように指定します。
set dd:plidump = d:¥mydump;
PLIDUMP 指定では、他のオプション (RECSIZE など) をオーバーライドすることはできません。このファイルに関連付けられているデフォルト装置は stderr: です。
図 5 に示すプログラムを実行すると、図 6 で示すような定様式ダンプが生成されます。
TestDump: proc options(main);
declare
Sysin input file,
Sysprint stream print file;
open file(Sysprint);
open file(Sysin);
put skip list('AbCdEfGhIjKlMnOpQrStUvWxYz');
call IssueDump;
IssueDump: proc;
call plidump( ' ', 'Testing PLIDUMP');
end IssueDump;
end TestDump;IssueDump プロシージャー内にある PLIDUMP の呼び出しでは、PLIDUMP オプション (このオプションは 2 つの文字ストリングのうちの最初のストリング) を何も指定していないので, デフォルトが使用されます。また、PL/I のデフォルト・ファイル SYSIN および SYSPRINT が明示的にオープンされているので、定様式ダンプでは、入出力バッファーの該当部分の内容も表示されます。
1 * * * PLIDUMP * * * Date = 910623 Time = 142249090 Page 0001 2 User identifier: Testing PLIDUMP 3 * * * Calling trace * * * IBM0092I The PL/I PLIDUMP Service was called with Traceback (T) option At offset +00000024 in procedure with entry ISSUEDUMP From offset +0000010B in procedure with entry TESTDUMP * * * End of calling trace * * * * * * File Information * * * Attributes of file SYSIN 4 STREAM INPUT EXTERNAL 5 ENVIRONMENT( CONSECUTIVE RECSIZE(80) LINESIZE(0) ) 6 I/O Built-in functions: COUNT(0) ENDFILE(0) 7 I/O Buffer: 000D9008 00000000 00000000 00000000 00000000 '................' 000D9018 00000000 00000000 00000000 00000000 '................' 000D9028 00000000 00000000 00000000 00000000 '................' 000D9038 00000000 00000000 00000000 00000000 '................' 000D9048 00000000 00000000 00000000 00000000 '................' 000D9058 0000 '..' Attributes of file SYSPRINT STREAM OUTPUT PRINT EXTERNAL ENVIRONMENT( CONSECUTIVE RECSIZE(124) LINESIZE(120) PAGESIZE(60) ) I/O Built-in functions: PAGENO(1) COUNT(1) LINENO(1) 8 I/O Buffer: 000D8008 20416243 64456647 68496A4B 6C4D6E4F ' AbCdEfGhIjKlMnO' 000D8018 70517253 74557657 78597A20 0D0A0000 'pQrStUvWxYz ....' 000D8028 00000000 00000000 00000000 00000000 '................' 000D8038 00000000 00000000 00000000 00000000 '................' 000D8048 00000000 00000000 00000000 00000000 '................' 000D8058 00000000 00000000 00000000 00000000 '................' 000D8068 00000000 00000000 00000000 00000000 '................' 000D8078 00000000 00000000 00000000 '............' * * * End of File Information * * * * * * End of Dump * * * * * *
デフォルトでは T オプションが使用されるのでトレース情報が提供されますが、PLIDUMP に NT オプションを指定すれば、トレース情報を抑制できます。