Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

トップ  >  APのアボートダンプ

ダメなCOBOLプログラムを実行して、異常終了させる。

異常終了するダメプログラム

アボートダンプを取るためには、異常終了するダメCOBOLプログラムがなければなりません。既にそういうのがある人は、それを使いましょう。あまり良い例ではないかもしれませんが、お手軽に異常終了するダメプログラムを作ってみました。

下が今回作ったダメなCOBOLプログラムです。
すぐにわかると思いますが、32行目で使用するDATA4添字(I)は、30行目でキー入力した値を使っています。Iは14行目で定義されている通り、最大値は3です。従って4以上の値をキー入力すると、32行目でエラーが発生して異常終了となるはずです。

000010 IDENTIFICATION DIVISION.
000020**************************************
000030**          TEST                    **
000040**************************************
000050 PROGRAM-ID. ABORTT.
000060**
000070 ENVIRONMENT   DIVISION.
000080**
000090 DATA DIVISION.
000100 WORKING-STORAGE SECTION.
000110 01  DATA1 PIC 9(02) VALUE ZERO.
000120 01  DATA2 PIC X(08) VALUE "ABCD".
000130 01  TAB.
000140     02 DATA3 OCCURS 3 TIMES INDEXED BY I.
000150        05 DATA4 PIC 9(02).
000160 SCREEN SECTION.
000170 SD  GAMEN
000180      END STATUS IS ENDSTS.
000190 01  TEST1-ACT.
000200     05  LINE 10.
000210     10 COLUMN 15 PIC 9(02) USING DATA1.
000220 01  TEST1-DSP.
000230     05  LINE 10.
000240     10 COLUMN 2 PIC X(10) VALUE "DATA(9)".
000250*****************  命令部  **********************
000260 PROCEDURE DIVISION.
000270 MPRG.
000280**   添字の入力
000290         DISPLAY TEST1-DSP.
000300         ACCEPT  TEST1-ACT.
000310         SET I TO DATA1.
000320         MOVE 5 TO DATA4(I).
000330      STOP RUN.

コンパイルする

A−VXのCOBOL85でコンパイルします。
アボートダンプを解析させるためには、COBOLプログラムのコンパイル時にデバッグ用のオプションを指定する必要があります。具体的には以下の2つのパラメータを「YES」にします。


これらのパラメータを「YES」にしなかった場合、メモリダンプ解析ユーティリティで解析できません

リンクはいつも通りの方法で行います。

今回の例では、完成したロードモジュールは、「ABORTT」という名前で、「MSD002」の「TESTAPLML」に入れました。

ダメプログラムを実行してみる

コンパイル、リンクが終わったら早速実行してみます。

格納装置名:MSD002
格納LMファイル名:TESTAPLML
ロードモジュール名:ABORTT

の場合、RUNコマンド行で「ABORTT,FIL=TESTAPLML,DEV=MSD002」と入力して「ENTERキー」を押します。

するとダメプログラムが実行されて、以下のような画面になります。



2桁の数字を入力します。1か2か3を入力すると問題なく終了するはずです。
5とか10とか99とか、4以上の数字を入れるとエラーになり異常終了となります。

88を入力してみました。


エラーがでました。


他にも業務放棄やプログラム放棄などの強制終了した時も、アボートダンプは取れます。でも強制的に終了した時にアボートダンプが取れてもあまり意味はないので。
COBOL85コンパイル時のパラメータで他にデバッグに関連するものとして、DBG=があります。がDBG=は今回は関係無いので、お好みに応じて指定してください。
ちなみに通常、デバッグ情報出力パラメータ(DIO=)を「YES」にするのは、デバッグ中のみにします。
これを「YES」にすると、プログラム中にデバッグ用の情報が付加されるので、処理スピードが遅くなる、ディスク容量を喰う、メモリ容量を喰う、などのいろいろな不都合があります。リリース用(業務に使用する正式版)のプログラムでは「NO」にするのが普通です。この辺りの話は、Windowsなどでのプログラム開発と同じです。
メモリダンプ解析ユーティリティでアボートダンプの内容をそのまま表示することはできますが、単なる数字の羅列なので、その内容を見て調査するのはたぶんほとんど不可能です。