ダメな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」にします。
- デバッグ情報出力パラメータ(DIO=)に「YES」を指定する。
- コンパイル時添字/指標の限界検査(RNG=)に「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を入力してみました。
エラーがでました。
これを「YES」にすると、プログラム中にデバッグ用の情報が付加されるので、処理スピードが遅くなる、ディスク容量を喰う、メモリ容量を喰う、などのいろいろな不都合があります。リリース用(業務に使用する正式版)のプログラムでは「NO」にするのが普通です。この辺りの話は、Windowsなどでのプログラム開発と同じです。