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

AUTOMATIC 変数の検出

ダンプ内で AUTOMATIC 変数を検出するには、MAP オプション (および、必要なら AGGREGATE オプション) を指定した出力を使用して、AUTOMATIC 内でのオフセットを検出する 必要があります。 PLIDUMP が B オプションを指定して起動された場合、 そのダンプ出力には、それぞれのブロックごとの「動的保存域」(つまり、DSA) の 16 進ダンプが含まれます。 これが、そのブロックの自動ストレージになります。

例えば、以下の簡単なプログラムがあるとします。

Compiler Source
  Line.File
     2.0      test: proc options(main);
     3.0
     4.0        dcl a fixed bin(31);
     5.0        dcl b fixed bin(31);
     6.0
     7.0        on error
     8.0          begin;
     9.0            call plidump('TFBC');
    10.0          end;
    11.0
    12.0        a = 0;
    13.0        b = 29;
    14.0        b = 17 / a;

このプログラムに対するコンパイラーの MAP オプションの結果は、実際には右側にもう 1 つ列 があること、列の間のスペースはもっと離れていることを除き、以下のようになります。

* * * * *   S T O R A G E   O F F S E T   L I S T I N G   * * * * *
 IDENTIFIER DEFINITION ATTRIBUTES

 A          1-0:4      Class = automatic,  Location = 160 : 0xA0(r13),
 B          1-0:5      Class = automatic,  Location = 164 : 0xA4(r13),

したがって、A はレジスター 13 の 16 進 A0 のオフセット位置にあり、B はレジスター 13 の 16 進 A4 のオフセット位置にあること になります (ここで、レジスター 13 は DSA を指しています)。

このプログラムでは PLIDUMP が B オプションを指定して呼び出されているため、 現行の呼び出しチェーン内のそれぞれのブロックごとに、自動ストレージ の 16 進ダンプが含まれています。これは、以下のようになります(これも、右側の列が 省略されています)。

Dynamic save area (TEST): 0AD963C8
      +000000 0AD963C8  10000000 0AD96188 00000000 00000000
      +000020 0AD963E8  00000000 00000000 00000000 00000000
      +000040 0AD96408  00000000 00000000 00000000 0AD96518
      +000060 0AD96428  00000000 00000000 00000000 00000000
      +000080 0AD96448 - +00009F 0AD96467   same as above
      +0000A0 0AD96468  00000000 0000001D 00100000 00000000
      +0000C0 0AD96488  0B300000 0A700930 0AD963C8 00000000
      +0000E0 0AD964A8  00000000 00000000 00000000 00000000
      +000100 0AD964C8  0AA47810 0A70E6D0 0AD96540 0AD960F0
      +000120 0AD964E8  00000001 0A70F4F8 0AD96318 00000000
      +000140 0AD96508  00000000 00000000 00000000 00000000

AUTOMATIC 内で、A は 16 進オフセット A0 のところにあり、B は 16 進オフセット A4 のところにあるので、ダンプでは、A と B がそれぞれ (予想通りの) 16 進値である 00000000 と 0000001D になっていることを示しています。

コンパイラー・オプション OPT(2) および OPT(3) を指定すると、一部の変数 (特に FIXED BIN および POINTER スカラー変数) がストレージに割り振られないこと があり、そのためダンプ出力に表示されないことに注意してください。


Terms of use | Feedback

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