プログラマとしては負けている様で、デバッガーには頼りたくないと常日頃思っていますが、それでも使う機会はあるもので、そんなRPGのデバッガーが V7R5(V7R3 +PTF以上) で強化された模様。
追加されたオプションが ①DEBUG(*CONSTANTS)
と ②DEBUG(*RETVAL)
。
-
①DEBUG(*CONSTANTS)
はデバッグ中に名前付き定数の中身が参照出来る -
②DEBUG(*RETVAL)
はプロシージャの戻り値が参照できる。上書き出来る
個人的に①は「出来てなかったんだー」と思うくらいで、「D仕様書」を見れば判るからと言えばそうだが、いちいちソースを移動する手間を考えるとそれはそれで便利。
②は以前から「出来ない事が不便だと」思っていました。戻り値を変数で受けて、DUMP
したりする事を考えるとコレは便利!
以下、使用例
H DFTACTGRP(*NO) ACTGRP(*NEW)
H*- *CONSTANTS …定数ををデバッグ時参照する
H*- *RETVAL …プロシージャの戻り値を「 _QRNU_RETVAL 」で表示/変更する
H DEBUG(*CONSTANTS : *RETVAL)
D*- ---<< 変数定義 >>-----*
D MSG S 40A
C*- ***************************************************************
C*- * メインロジック **
C*- ***************************************************************
C EVAL MSG = SUBPROC1()
C MSG DSPLY
C*
C SETON LR
C RETURN
P*- ***************************************************************
P*- * サブプロシージャ **
P*- ***************************************************************
P SUBPROC1 B
D SUBPROC1 PI 40A
D*
D*- ---<< 定数定義 >>-----*
D C#STR C ' 名前付き定数 '
D*- ---<< 変数定義 >>-----*
D RET S 40A
C*
C EVAL RET = ' 【変更前】 '
C + C#STR
C*
C RETURN RET
C*
P E
デバッグする場合は、コンパイル時のオプションに DEBGVIEW(*ALL)
等を付与して下さい。
定数の参照
まず、上記PGMの実行結果は DSPLY命令で「**【変更前】名前付き定数 **」と表示されます。
次に STRDBG
でデバッグを開始して、適当な停止点で 名前付き定数 を「F11」で参照すると中身を確認することが出来ます。
戻り値の参照及び変更
更に、プロシージャの最終地点に停止点を追加します。すると戻り値を返却する直前で停止し、特殊変数
「_QRNU_RETVAL」を介して、プロシージャの戻り値を確認することが出来ます。
この特殊変数「_QRNU_RETVAL」をEVALで値変更すると、プロシージャの戻り値が変更されます。
プロシージャの戻り値が見られるのは便利なのですが、この特殊変数名「_QRNU_RETVAL」は絶対に忘れそうなので、IMEにでも登録しておきましょう!