Delphi/400ではIBM i のプログラムを連携して呼び出すために
TCall400というコンポーネントが用意されています。
(※TCall400についてはこちら)
今回はTCall400から呼び出すRPGプログラムをデバッグする方法をご紹介いたします。
TCall400から実行するRPGプログラムはバッチジョブとして動作しますので、
バッチジョブをデバッグする方法を利用します。
以下にその手順を解説します。
(※実際はTCall400に限らず、TAS400.RemoteCmdでCALLした場合など
多くのバッチジョブで本記事のTipsをご利用いただけます。)
1.CLP/RPGのコンパイル
5250画面から、デバッグする対象のプログラムをコンパイルします。
その際に、下記のようにデバッグオプション(黄色部分)を設定します。
例) D400TESTライブラリのRPG010をコンパイル
CRTRPGPGM PGM(D400TEST/RPG010) SRCFILE(D400TEST/QRPGSRC) SRCMBR(RPG010) OPTION(*SRCDBG)
例) D400TESTライブラリのCLP010をコンパイル
CRTCLPGM PGM(D400TEST/CLP010) SRCFILE(D400TEST/QRPGSRC) SRCMBR(CLP010) OPTION(*SOURCE)
※OPTIONの設定方法は異なりますが、RPGLEやCLLEでも同様です。
※一度この設定でコンパイルしておけば、毎回コンパイルする必要はありません。
2.デバッグしたいプログラムを起動
Delphi/400のアプリケーションを起動して、IBM i に接続を行います。
3.ジョブ番号、ユーザー、ジョブ名の取得
5250画面から、WRKACTJOBを実行します。
Delphi/400プログラムのジョブは、CO4XXTCPサブシステム配下に追加されます。
CO4XXのXX部分はDelphi/400のバージョンによって異なります。
オプションの「5」の処理などで、該当ジョブのジョブ番号、ユーザー、ジョブ名を取得します。
ジョブ名は基本的に「P」+実行端末のIPアドレスの下9桁になっています。
※実行中のプログラム側にジョブ番号、ユーザー、ジョブ名を取得させることも可能です。
手順については過去のこちらのTIPSをご参照ください。
4.STRSRVJOBコマンドを実行
3.で取得したジョブ番号、ユーザー、ジョブ名を引数にして、STRSRVJOBを実行します。
STRSRVJOB JOB(ジョブ番号/ユーザー/ジョブ名)
例) ジョブ番号:168047 ユーザー:FUKUI ジョブ名:P168000107 の場合
⇒ STRSRVJOB JOB(168047/FUKUI/P168000107)
5.STRDBGコマンドを実行
STRDBGコマンドを発行し、デバッグを行う箇所を設定します。
STRDBG PGM(ライブラリ名/プログラム名) UPDPROD(*YES) OPMSRC(*YES)
例) D400TESTライブラリのRPG010をデバッグ
⇒ STRDBG PGM(D400TEST/RPG010) UPDPROD(*YES) OPMSRC(*YES)
6.停止点の設定
デバッグしたいRPGプログラムのステップにF6キーで停止点を設定します。
7.Delphi/400アプリケーションの画面を操作
Delphi/400アプリケーション側で対象のRPGを実行する操作をして、RPG側に制御を移します。
8.デバッグの実行
6.で設定した停止点でプログラムが一時停止しますので、
通常のCLやRPGプログラムと同様にデバッグができます。
9.デバッグの終了
デバッグの終了時には、
ENDDBGコマンドとENDSRVJOBコマンドを実行して終了します。
※この2つはパラメータ不要。
※Delphi/400アプリケーションを先に落とした等、ジョブが終了している場合にも必要です。
以上の手順で、
Delphi/400のTCall400から実行するCLやRPGプログラムをデバッグすることができます。
<関連記事>
- Delphi/400 コンポーネント リファレンス【TCall400】
- SmartPad4i IBMiプログラムのデバッグ方法(デバッグ部分はほぼ同じです)