00.Fault Analyzerによるダンプ解析:はじめに

アセンブラー・プログラミングをする上で避けて通れないのがダンプ・リストの解析です。z/OS(MVS)には、プログラムが実行中に異常終了すると、その原因を判別するための診断資料としてプログラムに関連する仮想記憶域をダンプして出力する機能があります。出力されたダンプ・リストを解析することで、異常終了や誤動作の原因を知るための大きな手がかりを得ることができます。
とは言え、実際にダンプ・リストを解析するには単にリストの見方だけではなく、z/OSやプログラムが利用しているコンポーネントのプログラミング・サービスについての知識や経験も必要です。しかしながら、今日のz/OSシステムはある意味「枯れて」しまっているため、実務を通してダンプ解析のスキルや経験を積む機会にも恵まれません。「Fault Analyzer」は、ダンプ解析のスキルや経験を補完して異常終了時のプログラムの状態、どこでエラーが起きたのか、その際のレジスターやメモリーの内容がどうであったのかなどを具体的に示してくれます。ダンプ解析のアドバイザーとして活用できます。

Fault Analyzerのリアルタイム分析レポート

Fault Analyzerがアクティブであれば、プログラムが異常終了した際にリアルタイム分析が行われて分析結果がレポートとして出力されます。レポートのDD名はIDIREPRTです(JCLに定義されていなければSYSOUTが動的割り振りされる)。上記サンプル・レポート内で【】で囲んだ解説文の箇所が、エラー内容やエラー(ABEND)を引き起こした命令と関連データ領域を示します。
エラーを起こしたのは、アセンブリー・リスト上のステートメント番号57のCVB命令で、理由はDWORD領域の内容が正しい10進数でないからであることがわかります。X’0000303900001A85’と16進数が格納されてしまっています。Fault Analyzerが出来ることはここまでです。何故DWORD領域にX’0000303900001A85’が格納されてしまったか迄はわかりません。それについては、プログラマーがプログラム・コードを調べて原因を突き止める必要があります。

Fault Analyzerのリアルタイム分析機能は、ABEND発生時のダンプ出力をインターセプトしてプログラムのアセンブリー・リストと照らし合わせてエラーとなった命令や関連データ領域を示してくれます。プログラムのアセンブル時に、ロード・モジュールとは別にADATAと呼ばれるサイドファイルを生成して保管しておき、実行時にそのサイドファイル・ライブラリーをJCLで定義しておけばFault Analyzerによって読み込まれます。サイドファイルが無くてもリアルタイム分析は行われますが、サイドファイルを生成しておけばソース・コードによってエラー箇所や関連データが示されるので、アセンブラー・プログラミングやダンプ解析に慣れていなくてもデバッグ効率が上がります。なお、Fault Analyzerに相当する分析ツールは昔からありました。有名なものとしてAbend-AIDというベンダー製品があります。