JCL と IMS の PL/I デバッグ

EXEC SQL、EXEC CICS または EXEC DLI 文を含む PL/I プログラムでは、plitest パラメーターでプリプロセッサ -optexec オプションを使用できます。これによりプリプロセッサによって、コードに PL/I マクロが挿入されます。このマクロは PLITEST() コールをとおしてデバッガーを呼び出します。これは自動的に行われるため、PLIDEBUG.DAT などのサイド ファイルを編集する必要がありません。また、CodeWatch コマンドに関する知識も特に必要ありません。

ただし、このデバッグ方法は EXEC 言語機能を持たないバッチ プログラムや、EXEC DLI の代わりに PLITDLI を使用する IMS ベースのプログラムには使用できません。

このようなプログラムでは PL/I マクロ プリプロセッサではなく EXEC プリプロセッサで使用される技法を使用して、自動的に PLITEST() の呼び出しを生成します。

  1. デバッグするプログラムの実行パス内のいずれかの場所に、次のコードを挿入します。
    %if ATTACHDEBUGGER %then
    %do;
        DCL JAVAUI FIXED BIN(31) NATIVE VALUE(1); 
        CALL PLITEST("shlib " || procedurename() || ".dll;" || 
                     "env "   || procedurename() || ";br STARTDEBUG;" ||
                     "br %exit [det;q];c", 
                     " ", JAVAUI);
        STARTDEBUG:;
    %end;
    

    このコードによって、プログラムの実行時にデバッガー自体を自動的に添付し、STARTDEBUG ラベルの位置で停止します。

    注: 上記のコードは Windows 環境で.DLL が使用されていることを想定しています。UNIX 環境で使用する場合は、.dll.so に置換します。これは PL/I 組み込み関数 PROCEDURENAME() を使用して環境と shlib 引数を動的に判断します。
  2. コマンド ラインからプログラムをコンパイルする場合、次のオプションを mfplx コマンドに追加します (mfpp を明示的に呼び出す場合は、-define オプションのみを追加)。
    –deb -macro -define attachdebugger
  3. Enterprise Server を起動し、プログラムを実行します。
    注: Windows 環境の場合は、Enterprise Developer command promptから casstart を使用して Enterprise Server を起動する必要があります。そうしないとデバッガーが添付されません。

このコード サンプル内の %if..%do 条件は、機能的には COBOL の $IF や C の #ifdef と同じです。サンプル全体の機能としては CBL_DEBUGBREAK と同等ですが、ブレークポイントの設定やスタートアップ時の起動など、任意の CodeWatch コマンドを指定できる機能が追加されています。