02.Fault Analyzerによるダンプ解析:リアルタイム分析レポート①

リアルタイム分析が行われると、SYSUDUMPやSYSABEND等のダンプ出力に代わりリアルタイム分析レポートが出力されます。このレポートを参照して、異常終了した箇所やレジスター及びメモリーの内容を把握します。
リアルタイム分析レポートはいくつかのセクションに分かれています。全てのセクションの内容を確認する必要はありません。デバッグに必要な情報が集められればよいのです。各セクションは、<H1>のタグで示されます。IDIREPRT DDステートメントに出力された分析レポート内の<H1>文字列をスキャンすれば、容易に各セクションに位置付けることができます。以下のサンプルを用いて、主なセクションの概要を説明します。

1つ目がプログラム内の命令でS0C4 ABENDした例、2つ目がプログラムが発行したWTOマクロがSD23でABENDした例です。

SYNOPSISセクション

SYNOPSISセクションには、異常終了に関する要約情報が出力されます(ABEND内容によっては出力されない項目もある)

  • ABENDコードと理由コード(割込みコード)、そのエラー・コードについての要約した解説。
  • エラーを引き起こした命令(アセンブリー・リスト上のステートメント番号)
  • エラーを引き起こした命令に関連するデータ領域など
  • プログラム内でエラーを起こしている【ABENDS0C4の例】では、アセンブリー・リスト上のステートメント番号105のXC命令(モジュールGOのCSECT MAINENTRの+X’110’)が割込みコード4でプログラム割込みを起こしていることが示されています。エラーを起こした命令は自分のプログラム内ですからデバッグも単純です。
    しかし、【ABENDSD23の例】ではエラーそのものを起こしているのはモジュールCNZINLPAの+X’15328’です。自分のプログラムではなくOSのモジュールです。こういう場合は、ABENDしたOSのモジュールに問題があるのではなく、OSのサービスを呼び出した自分のプログラムの呼び出し方に問題があります。OS側としては「サービスの呼び出し方が悪いからこれ以上処理出来ないのでABENDするよ」ということで異常終了しています。従って、プログラム側としてはどこでそのサービスを呼び出していたのか、どのようなパラメーターでサービスを呼び出したのかを追跡して行きます。

    EVENT SUMMARYセクション

    モジュール名、入口点名、エラーまたは割込みポイントを、ABENDに関連するイベント発生順に並べたリストです。
    エラーポイントと割込みポイントは、アセンブリー・リスト上のステートメント番号やモジュールや入口点からの変位で示されます。プログラムが呼び出したMVSアセンブラー・サービス・ルーチン内でエラーが検知された場合などは、起因となったマクロや関連するマクロ内のSVC命令のアドレスで示されます。

    プログラム内でエラーを起こしている【ABENDS0C4の例】では、ABENDに関連するイベントは1つしかありません。プログラム内で直接プログラム割込みを起こしているからです。
    【ABENDSD23の例】ではABENDに関連するイベントは2つです。2つ目がABENDそのものが起きているOS側のモジュールにおけるイベントです。ここでもSYNOPSISセクション同様に、モジュールCNZINLPAの+X’15328’でABEND SD23していることがわかります。着目するのは1つ前の1つ目のイベントです。モジュールGOのCSECT MAINRTNの+X’13E’でSVC 35が実行されています。ここがOSのプログラミング・サービスを呼び出した箇所で、アセンブリー・リスト上のステートメント132の命令です。