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

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

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

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

これらのオフセットを、ランタイム・エラー・メッセージに示されたオフセットと共に使用して、このメッセージが該当するステートメントを判別できます。

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

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

図 2. ステートメント番号の検索 (コンパイラー・リストの例)
Compiler Source
    Line.File
       1.0
       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; j = 0;
       8.0          j = j / i;
       9.0          put skip data( j );
      10.0        end Sub1;
      11.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                    000002 |        THEMAIN  DS       0D
000000  47F0  F024        000002 |                 B        36(,r15)
000004  01C3C5C5                                            CEE eyecatcher
000008  000000B0                                            DSA size
00000C  000001F8                                            =A(PPA1-THEMAIN)
000010  47F0  F001        000002 |                 B        1(,r15)

 . . .

000000                    000004 |        SUB1     DS       0D
000000  47F0  F024        000004 |                 B        36(,r15)
000004  01C3C5C5                                            CEE eyecatcher
000008  00000140                                            DSA size
00000C  00000190                                            =A(PPA1-SUB1)
000010  47F0  F001        000004 |                 B        1(,r15)

...

000086  5020  D0B8        000007 |                 ST       r2,I(,r13,184)
00008A  1842              000007 |                 LR       r4,r2
00008C  5040  D0BC        000007 |                 ST       r4,J(,r13,188)
000090  5800  D0B8        000008 |                 L        r0,I(,r13,184)
000094  8E40  0020        000008 |                 SRDA     r4,32
000098  1D40              000008 |                 DR       r4,r0
00009A  1805              000008 |                 LR       r0,r5
00009C  5000  D0BC        000008 |                 ST       r0,J(,r13,188)
0000A0  4100  D0C0        000009 |                 LA       r0,_temp1(,r13,192)
0000A4  5000  D130        000009 |                 ST       r0,_temp2(,r13,304)
0000A8  A708  5A88        000009 |                 LHI      r0,H'23176'
0000AC  4000  D0EC        000009 |                 STH      r0,_temp1(,r13,236)
0000B0  5800  6004        000009 |                 L        r0,SYSPRINT(,r6,4)
0000B4  5000  D12C        000009 |                 ST       r0,_temp2(,r13,300)
0000B8  4100  0001        000009 |                 LA       r0,1
0000BC  5000  D0C0        000009 |                 ST       r0,_temp1(,r13,192)
0000C0  4100  D128        000009 |                 LA       r0,_temp2(,r13,296)

...

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

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

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


Terms of use | Feedback

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