Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, プログラミング・ガイド

ステートメント・オフセット・アドレス

LIST コンパイル・オプションを使用すると、コンパイラーはコンパイラー・ リストに疑似アセンブラー・リストを組み込みます。 このリストには、BLKOFF コンパイラー・オプションの設定によって異なる意味を持つオフセットが命令ごとに含まれています。

疑似アセンブラー・リストには、各ブロックのコードの終わりに現行モジュールの開始位置 からのブロックのオフセットも含まれています (それぞれのステートメントに表示されるオフセット を、ブロックまたはモジュールのオフセットに変換できるようにするため)。

これらのオフセットと、ランタイム・エラー・メッセージで指定されたオフセットを用いて、 このメッセージが当てはまるステートメントを判別することができます。

OFFSET オプションは、それぞれのステートメントに対して、 そのステートメントに属する最初の命令のオフセットを提供するテーブルを作成します。

図 2 に示す例では、メッセージは SUB1 の入り口 からオフセット +58 で条件が生じたことを示しています。 このオフセットは、コンパイラー・リストの抜粋では行番号 8 と 関連して示されています。このエラーがあることを示すステートメントからの実行時出力は、図 3 のように示されます。

図 2. ステートメント番号の検索 (コンパイラー・リストの例)
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)

図 3. ステートメント番号の検索 (ランタイム・メッセージの例)
Message :

IBM0301S ONCODE=320  The ZERODIVIDE condition was raised.
         From entry point SUB1 at compile unit offset +00000058 at
         address 0D3012C0.

ダンプと ON ユニット SNAP エラー・メッセージ内に示された項目オフセット をこのテーブルと対比すれば、誤りのあるステートメントを見つけ出すことが できます。 このステートメントを識別するには、メッセージ内で指名された ブロックに関連したテーブルのセクションを探し出してから、メッセージ 内のオフセット以下かまたはそれと等しい最大オフセットを見つけ出し ます。 このオフセットに関連したステートメント番号が求める番号です。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)