デバッグ行
-
一般的なCOBOLで使えるデバッグ機能(デバッグ行)も、A-VX COBOL85でも普通に使えます。
たぶん誰でも知っていると思うので、簡単に説明。
「COBOL85言語説明書」の「3.7 デバッグ」に書いてあるようにWITH DEBUGGING MODE句とデバッグ行を使ってみます。
デバッグ行を利用することにより、デバッグするときだけ実行する命令を挿入することができ、デバッグが終わったらその命令を手作業で1つ1つ消す必要なく一括で取り去ることができます。
(例)
6行目にWITH DEBUGGING MODE、20行目がデバッグ行
意味のないプログラムですが、下のようなCOBOLのプログラムがあったとします。
17行目でI2に1を足していますが、その「足した結果のI2の値が正しいかを確認したいなぁ」と思ったとします。
そのような時にデバッグ行を使います。
000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. MIYAZA. 000030 ENVIRONMENT DIVISION. 000040 CONFIGURATION SECTION. 000050 SOURCE-COMPUTER. EXPRESS5800 000060 WITH DEBUGGING MODE 000070 . 000080 SPECIAL-NAMES. GDD IS ERR-MSG. 000090 DATA DIVISION. 000100 WORKING-STORAGE SECTION. 000110 01 GR01. 000120 05 I1 PIC 9(04) VALUE ZERO. 000130 05 I2 PIC 9(04) VALUE ZERO. 000140 PROCEDURE DIVISION. 000150 MAIN-R-SEC SECTION. 000160 MAIN-RTN. 000170 DISPLAY "I1=" I1. 000180D DISPLAY "I2 BEFORE =" I2. 000190 COMPUTE I2 = I2 + 1. 000200D DISPLAY "I2 AFTER =" I2. 000210 DISPLAY "成功終了。RESETキーでプログラム終了" 000220 UPON ERR-MSG. 000230 STOP RUN.
6行目にある「WITH DEBUGGING MODE」がデバッグ行を有効にするための命令です。
18行目と20行目にI2の値を表示するための命令を書きます。7桁目にDという文字を書きます。これがデバッグ行。
コンパイル、リンクして、実行形式のロードモジュールを作ります。
6行目のWITH DEBUGGING MODEは注釈に変更、20行目がデバッグ行
そのロードモジュールを実行します。
WITH DEBUGGING MODE句があるので、20行目も実行されます。
18行目ではI2の値が0で、20行目では1になっていることがわかります。
デバッグが終わったら、WITH DEBUGGING MODEを消します。下のように注釈行化してもいいです。
これでデバッグ行は実行されなくなります。
000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. MIYAZA. 000030 ENVIRONMENT DIVISION. 000040 CONFIGURATION SECTION. 000050 SOURCE-COMPUTER. EXPRESS5800 000060* WITH DEBUGGING MODE ←注釈行になってます。 000070 . 000080 SPECIAL-NAMES. GDD IS ERR-MSG. 000090 DATA DIVISION. 000100 WORKING-STORAGE SECTION. 000110 01 GR01. 000120 05 I1 PIC 9(04) VALUE ZERO. 000130 05 I2 PIC 9(04) VALUE ZERO. 000140 PROCEDURE DIVISION. 000150 MAIN-R-SEC SECTION. 000160 MAIN-RTN. 000170 DISPLAY "I1=" I1. 000180D DISPLAY "I2 BEFORE =" I2. 000190 COMPUTE I2 = I2 + 1. 000200D DISPLAY "I2 AFTER =" I2. 000210 DISPLAY "成功終了。RESETキーでプログラム終了" 000220 UPON ERR-MSG. 000230 STOP RUN.
コンパイル、リンクして、実行形式のロードモジュールを作り、そのロードモジュールを実行します。
18行目と20行目のデバッグ行は実行されなくなりました。
上の例では、「WITH DEBUGGING MODE」を書いたり、消したり(注釈にしたり)していますが、いちいちソースプログラムを書き換えなければならないので、非常に面倒です。WITH DEBUGGING MODEを書いたり消したりするだけで、ソースプログラムのバージョンが変わってしまうので、ソースプログラムの管理上も問題があります。
実は、そんな面倒なことをする必要はありません。
デバッグ行(デバッグ機能)を実行するか/実行しないかをコンパイル時にパラメータで指定することができます。
COBOL85のコンパイラには、DEBUG MODE(DBG=)パラメータというものがあります。このパラメータに1や2を入力すれば、いちいちプログラムにWITH DEBUGGING MODEを書いたり消したりする必要はありません。
0.SOURCE プログラムに書いてある通りにする。つまりWITH DEBUGGING MODEがあればデバッグ行を実行し、なければデバッグ行を実行しない。 1.YES 必ずデバッグ行を実行する。(プログラムにWITH DEBUGGING MODEが書いてあっても、書いてなくても、必ず書いてあるものとしてコンパイルする。) 2.NO 必ずデバッグ行を実行しない。 COBOL85コンパイラでコンパイルするときに、デバッグするときはDEBUG MODEパラメータに1、本番用のロードモジュールを実行するときは2を指定すればいいのです。