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

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

トップ  >  デバッグ行

デバッグ行

一般的なCOBOLで使えるデバッグ機能(デバッグ行)も、A-VX COBOL85でも普通に使えます。
たぶん誰でも知っていると思うので、簡単に説明。

「COBOL85言語説明書」の「3.7 デバッグ」に書いてあるようにWITH DEBUGGING MODE句とデバッグ行を使ってみます。

デバッグ行を利用することにより、デバッグするときだけ実行する命令を挿入することができ、デバッグが終わったらその命令を手作業で1つ1つ消す必要なく一括で取り去ることができます。

(例)
意味のないプログラムですが、下のようなCOBOLのプログラムがあったとします。
17行目でI2に1を足していますが、その「足した結果のI2の値が正しいかを確認したいなぁ」と思ったとします。
そのような時にデバッグ行を使います。

6行目にWITH DEBUGGING MODE、20行目がデバッグ行
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という文字を書きます。これがデバッグ行。

コンパイル、リンクして、実行形式のロードモジュールを作ります。
そのロードモジュールを実行します。
WITH DEBUGGING MODE句があるので、20行目も実行されます。
18行目ではI2の値が0で、20行目では1になっていることがわかります。


デバッグが終わったら、WITH DEBUGGING MODEを消します。下のように注釈行化してもいいです。
これでデバッグ行は実行されなくなります。

6行目のWITH DEBUGGING MODEは注釈に変更、20行目がデバッグ行
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を指定すればいいのです。