LIST コンパイル・オプションを使用すると、コンパイラーはコンパイラー・ リストに疑似アセンブラー・リストを組み込みます。 このリストには、BLKOFF コンパイラー・オプションの設定によって異なる意味を持つオフセットが命令ごとに含まれています。
疑似アセンブラー・リストには、各ブロックのコードの終わりに現行モジュールの開始位置 からのブロックのオフセットも含まれています (それぞれのステートメントに表示されるオフセット を、ブロックまたはモジュールのオフセットに変換できるようにするため)。
これらのオフセットと、ランタイム・エラー・メッセージで指定されたオフセットを用いて、 このメッセージが当てはまるステートメントを判別することができます。
OFFSET オプションは、それぞれのステートメントに対して、 そのステートメントに属する最初の命令のオフセットを提供するテーブルを作成します。
図 2 に示す例では、メッセージは SUB1 の入り口 からオフセット +58 で条件が生じたことを示しています。 このオフセットは、コンパイラー・リストの抜粋では行番号 8 と 関連して示されています。このエラーがあることを示すステートメントからの実行時出力は、図 3 のように示されます。
Compiler Source
Line.File
2.0 TheMain: proc options( main );
3.0 call sub1();
4.0 Sub1: proc;
5.0 dcl (i, j) fixed bin(31);
6.0
7.0 i = 0;
8.0 j = j / i;
9.0 end Sub1;
10.0 end TheMain;
. . .
OFFSET OBJECT CODE LINE# FILE# P S E U D O A S S E M B L Y L I S T I N G
000000 00002 | THEMAIN DS 0D
. . .
00004C 5800 C1F4 00002 | L r0,_CEECAA_(,r12,500)
000050 5000 D098 00002 | ST r0,#_CEECAACRENT_1(,r13,152)
000054 5810 D098 00000 | L r1,#_CEECAACRENT_1(,r13,152)
000058 5820 3062 00000 | L r2,=Q(@STATIC)(,r3,98)
00005C 4152 1000 00000 | LA r5,=Q(@STATIC)(r2,r1,0)
000060 18BD 00003 | LR r11,r13
000062 5800 D098 00003 | L r0,#_CEECAACRENT_1(,r13,152)
000066 5000 C1F4 00003 | ST r0,_CEECAA_(,r12,500)
00006A 58F0 3066 00003 | L r15,=A(SUB1)(,r3,102)
00006E 05EF 00003 | BALR r14,r15
000070 00010 | @1L1 DS 0H
000070 5810 5000 00010 | L r1,IBMQEFSH(,r5,0)
000074 58F0 1008 00010 | L r15,&Func_&WSA(,r1,8)
000078 5800 100C 00010 | L r0,&Func_&WSA(,r1,12)
00007C 5000 C1F4 00010 | ST r0,_CEECAA_(,r12,500)
000080 05EF 00010 | BALR r14,r15
000082 00010 | @1L4 DS 0H
000082 5800 D098 00002 | L r0,#_CEECAACRENT_1(,r13,152)
000086 5000 C1F4 00002 | ST r0,_CEECAA_(,r12,500)
. . .
000000 00004 | SUB1 DS 0D
. . .
000048 4100 0000 00007 | LA r0,0
00004C 5000 D098 00007 | ST r0,I(,r13,152)
000050 5840 D09C 00008 | L r4,J(,r13,156)
000054 8E40 0020 00008 | SRDA r4,32
000058 1D40 00008 | DR r4,r0
00005A 1805 00008 | LR r0,r5
00005C 5000 D09C 00008 | ST r0,J(,r13,156)
Message :
IBM0301S ONCODE=320 The ZERODIVIDE condition was raised.
From entry point SUB1 at compile unit offset +00000058 at
address 0D3012C0.ダンプと ON ユニット SNAP エラー・メッセージ内に示された項目オフセット をこのテーブルと対比すれば、誤りのあるステートメントを見つけ出すことが できます。 このステートメントを識別するには、メッセージ内で指名された ブロックに関連したテーブルのセクションを探し出してから、メッセージ 内のオフセット以下かまたはそれと等しい最大オフセットを見つけ出し ます。 このオフセットに関連したステートメント番号が求める番号です。