ダンプリスト解析入門①

By 神居 - Posted: 2012/08/17 Last updated: 2018/07/26 - Leave a Comment

ダンプリスト解析入門①:ダンプの種類と解析に必要な準備

アセンブラー・プログラミングをする上で避けて通れないのが、ダンプリストの解析です。MVS(および互換OS)には、プログラムが実行中に異常終了すると、その原因を判別するための診断資料として、プログラムに関連する仮想記憶域をダンプして出力する機能があります。出力されたダンプリストを解析することで、異常終了や誤動作の原因を知るための大きな手がかりとなります。
ユーザー自らアセンブラー・プログラミングをしない場合でも、メーカーやISVなどのプログラム製品をまったく利用しない運用はほとんどないでしょう。これらの製品でも、プログラムの異常終了などの際にはダンプリストが出力されることになります。直接ダンプリストを解析することがなくても、ダンプの取扱い方やリストに出力される内容の概要だけでも知っておくことは、システムを運用する上でも役立つ知識です。


ダンプの種類

細かな点で異なるものの、上記いずれのダンプもフォーマットされたリストの形式は基本的に同じです。このシリーズでは、ABENDダンプを使った解析方法を解説しますが、その方法はSVCダンプなどにも応用できます。


ABENDダンプの出力

ABENDダンプは、実行するプログラムのジョブ・ステップJCLに次に示すDD名でDDステートメントを定義しておけば、異常終了が発生するとMVSによって自動的に出力されます。

SYSUDUMP、SYSABENDおよびSYSMDUMPにおけるダンプ範囲は、システムで固定されているわけではなく、SYS1.PARMLIBのダンプ出力範囲設定パラメーターによってユーザー毎にカスタマイズされます。前述の出力範囲の違いはあくまでも一例で、実際のダンプ範囲はユーザーによって異なります。ただしダンプされるデータ量は、SYSUDUMPが一番少なく、次にSYSABEND、SYSMDUMPが一番多い、となるよう設定されることがほとんどです。実際の出力範囲は、SYSUDUMPならSYS1.PARMLIBのIEADMP00(KAADMP00、JAADMP00)、SYSABENDならIEAABD00(KAAABD00、JAAABD00)、SYSMDUMPならIEADMR00(KAADMR00)によってセンター・デフォルトが定義されます。また、CHNGDUMPコマンドによって一時的に変更することもできます。VOS3の場合は、SYSUDUMPなどのダンプ出力先を定義したDDステートメントにDUMPパラメーターを指定することで、ダンプ範囲をジョブ・ステップ単位で変更することができる。

一般的なバッチ・アプリケーション・プログラムでは、メーカーのデフォルト設定でも十分な場合が多いですが、SYSUDUMPもしくはSYSABENDで上記で示す範囲がダンプされるといいでしょう。
※足りなければ役に立たないし、多すぎれば不要な範囲のメモリー領域が大量にダンプされてしまう。


ダンプリストの解析に必要なもの

ダンプリストを見ながら、アセンブル・リストを照らし合わせ、必要に応じてCPU命令の解説書(z/Architecture解説書:Principles of Operation)や システム便覧(z/Architecture Reference Summary)を始めとするマニュアル類なども参照して、エラーの原因を調べていきます。
SYSUDUMPやSYSABENDの場合、ダンプはISPFやSDSFなどのデータセットやSYSOUTのブラウズ機能で表示してもいいのですが、80桁×24行のディスプレイ画面では、常に左右にスクロールしなければならず、見にくいだけで効率が上がりません。SYMPTOM DUMPやPSW、レジスターで示される領域の内容などから簡単に原因がわからず、あたりもつかないような場合は、ダンプをじっくり追いかける、ということになりますが、その場合、80桁のディスプレイしか利用できないのであれば、端末エミュレーターのファイル転送機能やFTPなどで、PC側にテキストファイルとしてダンプを送り、PC側のエディターやファイルブラウザーなどを使う方が効率がいいでしょう。

Posted in ダンプ解析入門 • • Top Of Page