ダンプ内で 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 スカラー変数) がストレージに割り振られないこと があり、そのためダンプ出力に表示されないことに注意してください。