Rational Developer for System z バージョン 7.6

プログラムからの Debug Tool の始動

ここでの説明は、言語環境プログラムで稼働しているプログラムに適用されます。 言語環境プログラムで稼働していないプログラムについては、言語環境プログラムの外部で始動されるプログラムに対する Debug Tool の始動の説明を参照してください。

Debug Tool は、次のいずれかの方法を使用して、ユーザー・プログラムの中から直接に始動することもできます。

ただし、これらの方法を、PROGRAM TYPE が SUB の DB2® ストアード・プロシージャーの中で使用することはできません。

これらの方法で Debug Tool を始動する場合は、Debug Tool が最初に出現したエンクレーブおよび後続のエンクレーブでのみ、非言語環境プログラムのプログラムのデバッグおよび非言語環境プログラムのイベントの検出ができます。 より高いレベルのエンクレーブでは、非言語環境プログラムのプログラムのデバッグまたは非言語環境プログラムのイベントの検出はできません。

これらの代替方法で Debug Tool を始動する場合でも、NOTESTCEEUOPT、または他の「間接的な」設定を使用して指定された TEST サブオプションに注意する必要があります。

ここで述べた内容に関して詳しくは、以下のトピックを参照してください。

CEETEST による Debug Tool の始動

CEETEST を使用してプログラム内から Debug Tool を始動し、それにコマンドのストリングを送ることができます。コマンド・ストリングを指定しなかった場合、またはコマンド・ストリングが不十分であった場合、Debug Tool は、端末からコマンドを入力するようにユーザーにプロンプトを出すか、あるいはコマンド・ファイルからコマンドを読み取ります。さらに、呼び出し手順が正常に行われたかどうかをユーザーに知らせる フィードバック・コードを受け取るオプションもあります。

フックを付けないでプログラムをコンパイルする場合には、プログラム内の戦略点で Debug Tool を始動するために、CEETEST 呼び出しを使用することができます。この方法を使用する場合でも、アプリケーションは シンボリック情報が作成されるようにコンパイルする必要があります。

Debug Tool が既に初期設定されているときに CEETEST を使用すると、結果的に、ブレークポイントに類似した再入になります。

下図には、CEETEST の構文が記載されています。

C および C++ の場合

C および C++ CEETEST コンパイラー・オプションの構文図

COBOL の場合

COBOL CEETEST コンパイラー・オプションの構文図

PL/I の場合

PL/I CEETEST コンパイラー・オプションの構文図
string_of_commands (入力)
ハーフワードの長さの接頭部ストリングで、Debug Tool のコマンド・リストを含んでいます。このコマンド・ストリング (string_of_commands) はオプションです。

Debug Tool が利用可能な場合は、リストにあるコマンドをデバッガーに渡し、実行します。

string_of_commands が省略されると、Debug Tool は、対話モードでプロンプトを出し、コマンド入力を要求します。

Debug Tool の場合、そのコマンドが 72 文字を超えるときは、必ず継続文字を使用してください。

コマンド・ストリング内の最初のコマンドの意味は、以下のいずれかのデバッグ・モードで Debug Tool を開始したいことを示します。

Debug Tool 端末インターフェース・マネージャーを使用せずにフルスクリーン・モード (VTAM 端末) で Debug Tool を開始したい旨を示すには、VTAM® 端末の LU 名と一緒に、TEST ランタイム・オプションの MFI サブオプションを指定します。例えば、PL/I プログラム内で以下の呼び出しをコーディングできます。

Call CEETEST('MFI%TRMLU001:*;Query Location;Describe CUS;',*);

例えば、COBOL プログラムの場合、以下の呼び出しをコーディングできます。

01 PARMS. 
05 LEN PIC S9(4) BINARY Value 43. 
05 PARM PIC X(43) Value 'MFI%TRMLU001:*;Query Location;Describe CUS;'. 

CALL "CEETEST" USING PARMS FC.

Debug Tool 端末インターフェース・マネージャーを使用 して、フルスクリーン・モード (VTAM 端末) で Debug Tool を開始することを示すには、この端末インターフェース・マネージャーに 対して指定した User ID と一緒に、TEST ランタイム・オプションの VTAM サブオプションを指定します。 例えば、PL/I プログラム内で以下の呼び出しをコーディングできます。

Call CEETEST(VTAM%USERABCD:*;Query Location;Describe CUS;,*);

上記の例で、サブオプション :* を置き換えて、優先ファイル名にすることができます。 TEST ランタイム・オプション指定で Debug Tool を開始済みで、ある優先ファイルを指定済みで、かつ、CEETEST 呼び出しで別の優先ファイルを指定すると、CEETEST 呼び出し内で指定した優先ファイルは TEST ランタイム・オプションで指定された優先ファイルを置き換えます。

Debug Tool をリモート・デバッグ・モードで始動したいことを示すには、このリモート・デバッガーの listen 対象の IP アドレスおよびポート番号と一緒に、TEST ランタイム・オプションの TCPIP サブオプションを指定します。

例えば、PL/I プログラム内で以下の呼び出しをコーディングできます。

Call CEETEST('TCPIP&your.company.com%8001:*;',*);

これらの呼び出しには末尾にセミコロン (;) が入っている必要があります。

fc (出力)
12 バイトのフィードバック・コードであり、このサービスの実行結果を示しますが、言語によってはオプションです。
CEE000
重大度 = 0
Msg_No = 適用外
メッセージ = サービスは正常に完了
CEE2F2
重大度 = 3
Msg_No = 2530
メッセージ = デバッガーが使用できなかった
注:
CEE2F2 のフィードバック・コードは、MVS/JES バッチ・アプリケーションでも入手できます。例えば、Debug Tool 環境が破壊された場合、あるいはデバッグ・イベント・ハンドラー をロードできない場合です。

言語環境プログラムは、フィードバック・コードのフィールドのデコードに役立つように、CEEDCOD と呼ばれる呼び出し可能サービスを提供します。フィードバック・コードを戻すように要求することをお勧めします。

C、C++ および COBOL の場合、Debug Tool が CALL CEETEST によって始動されているときに、GOTO コマンドを使用できるのは、Debug Tool が STEP または GO を介してユーザー・プログラムに制御を戻した後のみです。

CEETEST による Debug Tool の始動に関する追加の注意事項

C および C++
leawi.h ヘッダー・ファイルを組み込んでください。
COBOL
CEEIGZCT を組み込んでください。CEEIGZCT は、言語環境プログラムの SCEESAMP データ・セットの中にあります。
PL/I
CEEIBMAW および CEEIBMCT を組み込んでください。CEEIBMAW は、言語環境プログラムの SCEESAMP データ・セットの中にあります。
バッチおよび CICS 非端末処理
バッチ処理または CICS の非端末タスクから、CEETEST を使用して Debug Tool を開始する場合、フィードバック・コード (fc) を使用することを強くお勧めします。使用しない場合、その結果は予測不能です。

例: CEETEST を使用して Debug Tool を C/C++ から始動する

次の例は、言語環境プログラムの呼び出し可能サービス CEETEST を使用して、C または C++ プログラムから Debug Tool を始動する方法を示しています。

例 1
この例では、空のコマンド・ストリングが Debug Tool に渡され、言語環境プログラムのフィードバック・コードを指すポインターが戻されます。他の TEST ランタイム・オプションがプログラムにコンパイルされていない場合には、CEETEST への呼び出しは、すべてのデフォルトを有効なものにして Debug Tool を始動します。Debug Tool は、制御を得たあとユーザーにコマンドの入力を求めてプロンプトを出します。
#include <leawi.h>
#include <string.h>
#include <stdio.h>

int main(void) {
  _VSTRING  commands;
  _FEEDBACK fc;

  strcpy(commands.string, "");
  commands.length = strlen(commands.string);

  CEETEST(&commands, &fc);

}
例 2
この例では、有効な Debug Tool コマンドのストリングが Debug Tool に渡され、言語環境プログラムのフィードバック・コードを指すポインターが戻されます。CEETEST への呼び出しは Debug Tool を始動し、コマンド・ストリングが処理されます。ステートメント 23 では、x および y の値がログに表示され、プログラムの実行が再開されます。割り込みが発生した場合を除き、プログラム終了時の動作は、AT TERMINATION を設定したかどうかによって異なります。 コマンド GO が実行されると、コマンド LIST(z) は廃棄されます。
注:
コマンド・ストリングに STEP または GO を組み込むと、後続のコマンドはすべて処理されません。コマンド・ストリングは コマンド・ファイルと同じように作動します。
#include <leawi.h>
#include <string.h>
#include <stdio.h>

int main(void) {
  _VSTRING  commands;
  _FEEDBACK fc;

  strcpy(commands.string, "AT LINE 23; {LIST(x); LIST(y);} GO; LIST(z)");
  commands.length = strlen(commands.string);

  ·
  ·
  ·
CEETEST(&commands, &fc);
  ·
  ·
  ·
}
例 3
この例では、有効な Debug Tool コマンドのストリングが Debug Tool に渡され、フィードバック・コードを指すポインターが戻されます。CEETEST への呼び出しが失敗すると、通知メッセージが表示されます。

CEETEST への呼び出しが正常に行われると、Debug Tool が始動し、コマンド・ストリングが処理されます。ステートメント 30 では、x および y の値がログに表示され、プログラムの実行が再開されます。割り込みが発生した場合を除き、プログラム終了時の動作は、AT TERMINATION を設定したかどうかによって異なります。

#include <leawi.h>
#include <string.h>
#include <stdio.h>

#define SUCCESS "¥0¥0¥0¥0"

int main (void) {

   int x,y,z;
   _VSTRING commands;
   _FEEDBACK fc;

   strcpy(commands.string,"AT LINE 30 { LIST(x); LIST(y); } GO;");
   commands.length = strlen(commands.string);

  ·
  ·
  ·
CEETEST(&commands,&fc);
  ·
  ·
  ·
if (memcmp(&fc,SUCCESS,4) != 0) { printf("CEETEST failed with message number %d¥n",fc.tok_msgno); return(2999); } }

例: CEETEST を使用して Debug Tool を COBOL から始動する

次の例は、言語環境プログラムの呼び出し可能サービス CEETEST を使用して COBOL プログラムから Debug Tool を始動する方法を示しています。

例 1
Debug Tool の呼び出し時にコマンド・ストリングが渡され、フィードバック・コードが戻されます。制御を獲得すると、Debug Tool はアクティブになり、コマンドの入力を求めるプロンプトをユーザーに出すか、コマンド・ファイルからコマンドを読み取ります。
01  FC.
    02  CONDITION-TOKEN-VALUE.
    COPY CEEIGZCT.
        03  CASE-1-CONDITION-ID.
            04  SEVERITY    PIC S9(4) BINARY.
            04  MSG-NO      PIC S9(4) BINARY.
        03  CASE-2-CONDITION-ID
                  REDEFINES CASE-1-CONDITION-ID.
            04  CLASS-CODE  PIC S9(4) BINARY.
            04  CAUSE-CODE  PIC S9(4) BINARY.
        03  CASE-SEV-CTL    PIC X.
        03  FACILITY-ID     PIC XXX.
    02  I-S-INFO            PIC S9(9) BINARY.
77  Debugger                PIC x(7)  Value 'CEETEST'.

01  Parms.
    05  AA                  PIC S9(4) BINARY   Value 14.
    05  BB                  PIC x(14)   Value 'SET SCREEN ON;'.

CALL Debugger USING Parms FC.
例 2
コマンドのストリングは、Debug Tool の始動時に渡されます。Debug Tool は、制御を得た後、ステートメント 23 にブレークポイントを設定し、LIST コマンドを実行し、GO コマンドを実行することによりプログラムに制御を戻します。コマンド・ストリングは既に定義され、プログラムの DATA DIVISION の以下の宣言により、変数 COMMAND-STRING に割り当てられています。
01 COMMAND-STRING.
   05 AA     PIC 99    Value 60 USAGE IS COMPUTATIONAL.
   05 BB     PIC x(60) Value 'AT STATEMENT 23; LIST (x); LIST (y); GO;'.
呼び出しの結果は、プログラムの DATA DIVISION に次のように定義されている変数 によってフィードバック・コードに戻されます。
01  FC.
    02  CONDITION-TOKEN-VALUE.
    COPY CEEIGZCT.
        03  CASE-1-CONDITION-ID.
            04  SEVERITY    PIC S9(4) BINARY.
            04  MSG-NO      PIC S9(4) BINARY.
        03  CASE-2-CONDITION-ID
                  REDEFINES CASE-1-CONDITION-ID.
            04  CLASS-CODE  PIC S9(4) BINARY.
            04  CAUSE-CODE  PIC S9(4) BINARY.
        03  CASE-SEV-CTL    PIC X.
        03  FACILITY-ID     PIC XXX.
    02  I-S-INFO            PIC S9(9) BINARY.
コマンドの入力を求めるプロンプトは出されません。
CALL "CEETEST" USING COMMAND-STRING FC.

例: CEETEST を使用して Debug Tool を PL/I から始動する

次の例は、言語環境プログラムの呼び出し可能サービス CEETEST を使用して PL/I プログラムから Debug Tool を始動する方法を示しています。

例 1
Debug Tool の呼び出し時にコマンド・ストリングが渡されず、フィードバック・コードも戻されません。制御を獲得すると、Debug Tool はアクティブになり、コマンドの入力を求めるプロンプトをユーザーに出すか、コマンド・ファイルからコマンドを読み取ります。
CALL  CEETEST(*,*);    /*  omit arguments   */
例 2
Debug Tool の呼び出し時にコマンド・ストリングが渡され、フィードバック・コードが戻されます。制御を獲得すると、Debug Tool はアクティブになり、コマンド・ストリングを実行します。これ以上の割り込みを防ぐため、プログラムの実行が完了し、Debug Tool はプロンプトを出してユーザーにコマンド入力を要求します。
DCL   ch  char(50)
      init('AT STATEMENT 10 DO; LIST(x); LIST(y); END; GO;');

DCL   1  fb,
         5  Severity  Fixed bin(15),
         5  MsgNo     Fixed bin(15),
         5  flags,
            8  Case   bit(2),
            8  Sev    bit(3),
            8  Ctrl   bit(3),
         5  FacID     Char(3),
         5  I_S_info  Fixed bin(31);


DCL   CEETEST  ENTRY  ( CHAR(*)  VAR  OPTIONAL,
         1   optional ,
           254 real fixed bin(15),     /* MsgSev     */
           254 real fixed bin(15),     /* MSGNUM     */
           254                         /* Flags      */,
             255 bit(2),               /* Flags_Case     */
             255 bit(3),               /* Flags_Severity */
             255 bit(3),               /* Flags_Control  */
           254 char(3),                /* Facility_ID    */
           254 fixed bin(31) )         /* I_S_Info    */
                 options(assembler) ;

CALL  CEETEST(ch, fb);
例 3
この例は、CEEIBMAW の組み込みにより事前定義の 関数プロトタイプとマクロを使用し、また CEEIBMCT の組み込みにより 事前定義のフィードバック・コード定数と マクロを使用することを想定しています。

コマンド・ストリングは、Debug Tool に渡されると、10 番目のステートメントが実行されるたびにブレークポイントが設定されます。ブレークポイントが設定されると、Debug Tool は現在場所の情報を表示し、実行を継続します。CEETEST 呼び出しの後、正しい実行が行われたかフィードバック・コードが検査されます。

注:
戻されるフィードバック・コードは、CEE000 または CEE2F2 です。渡されたコマンドの実行結果をチェックする方法はありません。
%INCLUDE CEEIBMAW;
%INCLUDE CEEIBMCT;
DCL 01 FC FEEDBACK;

/* if CEEIBMCT is NOT included, the following DECLARES need to be
   provided:          ---------- comment start -------------

Declare CEEIBMCT  Character(8) Based;
Declare ADDR      Builtin;
%DCL FBCHECK ENTRY;
%FBCHECK:  PROC( fbtoken, condition ) RETURNS( CHAR );
   DECLARE
      fbtoken    CHAR;
      condition  CHAR;
RETURN('(ADDR('||fbtoken||')->CEEIBMCT = '||condition||')');
%END FBCHECK;
%ACT FBCHECK;
                      ---------- comment end --------------- */

Call CEETEST('AT Every 10 STATEMENT * Do; Q Loc; Go; End;'||
             'List AT;', FC);

If ¬FBCHECK(FC, CEE000)
   Then Put Skip List('----> ERROR! in CEETEST call', FC.MsgNo);

PLITEST による Debug Tool の始動

PL/I プログラムの場合、推奨される Debug Tool の始動方法は、組み込みサブルーチン PLITEST を使用することです。これは、CEETEST とまったく同じ方法で使用できますが、CEEIBMAW または CEEIBMCT の組み込み、あるいは宣言の実施が不要な点で異なります。

構文は次のとおりです。

PL/I PLITEST 組み込みサブルーチンの構文図
character_string_expression
Debug Tool コマンドのリストを指定します。必要に応じて、これは固定長ストリングに変換されます。
注:
  1. Debug Tool が、CALL PLITEST コマンド・ストリング内のコマンドで、プログラムに制御を戻すコマンド (例: GO) を実行した場合は、コマンド・ストリング内の 残りの実行待ちのすべてのコマンドが廃棄されます。
  2. フックを付けないでプログラムをコンパイルしたい場合、CALL PLITEST ステートメントをフックとして使用し、これらをプログラムの戦略点に挿入することができます。この方法を使用する場合でも、アプリケーションは シンボリック情報が作成されるようにコンパイルする必要があります。

次の例は、PLITEST を使用して Debug Tool を PL/I で始動する方法を示しています。

例 1
引数は、Debug Tool の始動時には渡されません。Debug Tool は、制御を得たあと プロンプトを出してユーザーにコマンド入力を要求します。
CALL PLITEST;
例 2
コマンドのストリングは、Debug Tool の始動時に渡されます。Debug Tool は、制御を得たあとステートメント 23 にブレークポイントを設定し、プログラムに制御を戻します。コマンドの入力を求めるプロンプトは出されません。さらに、GO コマンドの実行により、List Y; コマンドは廃棄されます。
CALL PLITEST('At statement 23 Do; List X; End; Go; List Y;');
例 3
変数 ch は文字ストリングとして宣言し、コマンドのストリングとして初期設定します。コマンドのストリングは、Debug Tool の始動時に渡されます。コマンドの実行後、Debug Tool はプロンプトを出してユーザーにコマンド入力を要求します。
DCL  ch   Char(45) Init('At Statement 23 Do; List x; End;');

CALL PLITEST(ch);

__ctest() 関数による Debug Tool の始動

C および C++ ライブラリー・ルーチン __ctest() または ctest() を使用して Debug Tool を始動することもできます。以下のステートメントをプログラムに追加して、

#include <ctest.h>

ctest() 関数を使用します。

注:
ctest.h をソースに組み込まない場合、または LANGLVL(ANSI) オプションを使用してコンパイルする場合には、__ctest() 関数を使用しなければなりません__ctest() 関数は、CICS ではサポートされていません。

__ctest() でコマンドのリストが指定されていると、Debug Tool はそのリスト内のコマンドを実行します。ヌル引数を指定した場合、Debug Tool は提供されたコマンド・ファイルからの読み取り、またはユーザーにプロンプトを出すことによってコマンドを入手します。コマンド・リスト内のすべてのコマンドを実行しないうちにアプリケーションに 制御が戻された場合、コマンド・リストの残りの部分は無視されます。Debug Tool は、指定されたコマンド・ファイルからの読み取りを続けるか、さらに入力を求めてプロンプトを出します。

フックを付けないでプログラムをコンパイルしたい場合、__ctest() 関数呼び出しを使用して、プログラム内の戦略点で Debug Tool を始動することができます。この方法を使用する場合でも、アプリケーションは シンボリック情報が作成されるようにコンパイルする必要があります。

Debug Tool が既に初期設定されているときに __ctest() を 使用すると、結果的に、ブレークポイントに類似した再入になります。

このオプションの構文は次のとおりです。

C および C++ __ctest() 機能の構文図
char_str_exp
Debug Tool コマンドのリストを指定します。

次の例は、C および C++ の場合の __ctest() の使用法 を示しています。

例 1
Debug Tool の始動時にヌル引数が渡されます。Debug Tool は、制御を得たあとプロンプトを出しユーザーにコマンド入力を要求します (または、指定されていれば、基本コマンド・ファイルからコマンドを読み取ります)。
__ctest(NULL);
例 2
コマンドのストリングは、Debug Tool の始動時に渡されます。ステートメント 23 で Debug Tool は、x および y をリストしてから、制御をプログラムに戻します。コマンドの入力を求めるプロンプトは出されません。この場合、コマンド GO が実行されるため、コマンド list z; が実行されることはありません。
__ctest("at line 23 {"
         "  list x;"
         "  list y;"
         "}"
         "go;"
         "list z;");
例 3
変数 ch が 文字ストリングを指すポインターとして宣言され、コマンドのストリングとして初期設定されます。コマンドのストリングは、Debug Tool の始動時に渡されます。コマンドのストリングを実行後、Debug Tool はユーザーにプロンプトを出して次のコマンド入力を求め ます。
char *ch = "at line 23 list x;";

·
·
·
__ctest(ch);
例 4
コマンドのストリングは、Debug Tool の始動時に渡されます。Debug Tool が制御を得た後、コマンドの入力を求めるプロンプトは出されません。Debug Tool は、コマンド・ストリング内のコマンドを実行し、GO コマンドによってプログラムに制御を戻します。
#include <stdio.h>
#include <string.h>

char *ch = "at line 23 printf(¥"x.y is %d¥n¥", x.y); go;";
char buffer[35.132];

strcpy(buffer, "at change x.y;");

__ctest(strcat(buffer, ch));

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)