あまり知られていない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での実行をデバッグするのに便利であるので覚えておくとよい。