MVS ダンプのデバッグ
dbx ユーティリティーを使用して、プログラム障害の原因を判別するための MVS™ ダンプを表示できます。-g オプションを指定してコンパイルした XL C/C++ プログラムに関しては、完全なソース・レベル・デバッグが可能です。 マシン語レベル・デバッグも、常に使用可能です。
プログラムを実行または変更しようとするコマンドはダンプ処理モードでは使用不能です。
以下のサブコマンドは使用可能です。
- alias
- args
- asid
- case
- down
- edit
- examine storage
- file
- func
- help
- history
- list
- listfiles
- listfuncs
- listi
- map
- move
- object
- pid
- prompt
- quit
- record
- registers
- set
- sh
- source
- thread
- unalias
- up
- use
- whatis
- where
- whereis
- which
例えば、次のとおりです。
# dbx -I /u/user01/coredump -C tsimple.dmp
FDBX1111: dbx args: dbx64 -I /u/user01/coredump -C tsimple.dmp
FDBX1112: Current Directory: /u/user01
FDBX0089: dbx for z/OS with 64-bit support.
FDBX0399: Compiled: Aug 4 2015 at 05:40:40 (v1.13) (PROD)
FDBX0400: OS level: 13.00 01; LE level: 4.1.13; (Coredump)
FDBX6499: CDA levels: ELF=D1451.20141216, DWARF=D1451.20141216,
DDPI=D1451.20141216
FDBX0100: Type 'help' for help.
FDBX0750: Initializing dump tsimple.dmp. This may take a
while...
FDBX0751: BPXGMCD4 token=0x25d758d8, release=1, level=0
FDBX0752: BPXGMCD4 Starting the TSO environment
FDBX0755: BPXGMCD4 BPXTIPCS allocating dump directory via
BLSCDDIR
FDBX0757: BPXGMCD4 BPXTIPCS invoking IPCS
FDBX0739: BPXGMCD4 return buffer:
BPXTIPCS Dump dataset, /u/user01/tsimple.dmp, allocated, rc=0
FDBX0762: Using ASID=0x002c
FDBX6432: Processing load module "./a.out"
FDBX9997: The loaded module does not contain module map which
may lead to bad performance. Suggest to use dbgld to create
module map to the executable before debugging.
FDBX6421: Loaded debug data from "/u/user01/coredump/a.dbg"
FDBX0732: interrupt code=0x4, abend code=0x0C4000, abend reason
code=0x4, instruction length=0x4
FDBX0665: segmentation violation (SIGSEGV)
stopped in foo at line 7 in file "a.c" ($t1)
7 return 0;
(dbx64) l 6,7
6 *ptr = abc;
7 return 0;
(dbx64) p ptr
0x0
FDBX0762 メッセージは、dbx がダンプの中から問題の原因となった ASID を見つけたので、その ASID を 今後の処理に使用するということです。FDBX0763 メッセージは、dbx が ダンプの中から問題の原因となった PID を見つけたので、その PID を今後の処理に使用するということです。 FDBX0732 メッセージは、アベンドに関する各種情報を示しています。
最終的に dbx は、発生した問題がどこにあるかを示します。上述の例では、セグメンテーション違反と (問題発生の次の) ソース・コード行を示しています。それ以前にリストされている行は、 エラー発生時に処理中だったソース・コード行を示しています。「where」や「print」などのコマンドは、 プログラムの最終状態を表示し、何が問題の原因だったかを判別するのに役立ちます。前述の例では 、fptr 値がゼロであったこと、そしてゼロ番地にデータを保管したことが セグメンテーション違反の原因となったことが分かります。
MVS データ・セットにあるダンプに対して dbx を起動するには、たとえば次のようにします。
dbx -I /u/fred/src -C "//'sys1.dump00'"