RPG

404. バッチJOBのデバッグ手法

あまり知られていないRPGのデバッグ手法をひとつ紹介する

先に「135. CLプログラムの一発ダンプ」で紹介したように
CLP では DMPCLPGM というコマンドを実行させればその時点での
CLPの変数やライブラリー・リストなどの実行情報のすべてが
印刷出力される。
ILE-RPG にも DMPCLPGM と良く似たデバッグ手法が存在していて
昔、RPG 2 (RPG |||ではない) で DEBUG というRPG命令があって

        '*DEBUG'     DEBUGLIST

と記述しておくとその時点でのフィールド情報などすべてが
印刷出力する機能があった。
ILE-RPG でもバッチ投入する適用業務では対話式デバッグのように
停止点で止めて EVAL コマンドでフィールド値を調べるわけにも
いかないのだが上記のRPG || の機能を次のように実行することができる。

(1) H-仕様書に DEBUG(*DUMP) を宣言する

RPG 2 のときもH-仕様書にデバッグを示す 1 を入れるということであった。

[例]

0001.00 H DFTNAME(UPDEDT) DATEDIT(*YMD/) BNDDIR('QC2LE') DEBUG(*DUMP)

(2) 演算仕様書で DUMP命令を実行する

0200.00 C     '*UPD'        DUMP 

この演算項目1 の *UPD はユーザーが識別できるような任意の文字列を入れることができるので
どのような値を入れておいても構わない

(3) ダンプ・リストが出力される

*UPD                                                
 プログラム状況域 :                                 
 プロシージャー名  . . . . . . . . . . :   UPDEDT   
 プログラム名  . . . . . . . . . . . . :   UPDEDT   
    ライブラリー . . . . . . . . . . . :   SPOOLWTR 
 モジュール名  . . . . . . . . . . . . :   UPDEDT   
  :

これでDUMP命令が実行されたときの標識やすべてのフィールドの値がQEZDEBUGに出力される。
出力されるのはエラーが発生したときにD を選択した場合に得られるあのデバッグ・リストと
同じものである。

                                                     スプール・ファイルの表示                                                       
  ファイル . . . :   QPPGMDMP                                                                          ページ/行     1/1           
  制御 . . . . . .                                                                                     桁             1 - 127       
  検索 . . . . . .                                                                                                                  
  *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....0....+....1....+....2....+..   
                                                                                                                            s゚ーニ゙   
   DSPDMP                                                                                                                           
    プログラム状況域 :                                                                                                              
    プロシージャー名  . . . . . . . . . . :   RPGDUMP                                                                               
    プログラム名  . . . . . . . . . . . . :   RPGDUMP                                                                               
       ライブラリー . . . . . . . . . . . :   TEST.COM                                                                              
    モジュール名  . . . . . . . . . . . . :   RPGDUMP                                                                               
    プログラム状況  . . . . . . . . . . . :   00000                                                                                 
    直前の状況  . . . . . . . . . . . . . :   00000                                                                                 
    エラーのステートメント  . . . . . . . :   00000000                                                                              
    RPG ルーチン  . . . . . . . . . . . . :   *DETC                                                                                 
    パラメーターの数  . . . . . . . . . . :                                                                                         
    メッセージ・タイプ  . . . . . . . . . :                                                                                         
    追加のメッセージ情報  . . . . . . . . :                                                                                         
    メッセージ・データ  . . . . . . . . . :                                                                                         
   RNX9001 の原因となった状況 . . . . . . :                                                                                         
    最終使用ファイル  . . . . . . . . . . :                                                                                         
    最終ファイル状況  . . . . . . . . . . :                                                                                         
    最終ファイル操作  . . . . . . . . . . :                                                                                         
                                                                                                                           続く ... 
 F3= 終了    F12= 取消し    F19= 左    F20= 右    F24= キーの続き      

対話式環境であってもすべてのフィールドの値が出力されることになるので
デバッグをやり直す回数が少なくなり効率的なデバッグとなる。

バッチJOBでの実行をデバッグするのに便利であるので覚えておくとよい。