ここでの説明は、言語環境プログラムで稼働しているプログラムに適用されます。 言語環境プログラムで稼働していないプログラムについては、言語環境プログラムの外部で始動されるプログラムに対する Debug Tool の始動の説明を参照してください。
Debug Tool は、次のいずれかの方法を使用して、ユーザー・プログラムの中から直接に始動することもできます。
ただし、これらの方法を、PROGRAM TYPE が SUB の DB2® ストアード・プロシージャーの中で使用することはできません。
これらの方法で Debug Tool を始動する場合は、Debug Tool が最初に出現したエンクレーブおよび後続のエンクレーブでのみ、非言語環境プログラムのプログラムのデバッグおよび非言語環境プログラムのイベントの検出ができます。 より高いレベルのエンクレーブでは、非言語環境プログラムのプログラムのデバッグまたは非言語環境プログラムのイベントの検出はできません。
これらの代替方法で Debug Tool を始動する場合でも、NOTEST、CEEUOPT、または他の「間接的な」設定を使用して指定された TEST サブオプションに注意する必要があります。
ここで述べた内容に関して詳しくは、以下のトピックを参照してください。
CEETEST を使用してプログラム内から Debug Tool を始動し、それにコマンドのストリングを送ることができます。コマンド・ストリングを指定しなかった場合、またはコマンド・ストリングが不十分であった場合、Debug Tool は、端末からコマンドを入力するようにユーザーにプロンプトを出すか、あるいはコマンド・ファイルからコマンドを読み取ります。さらに、呼び出し手順が正常に行われたかどうかをユーザーに知らせる フィードバック・コードを受け取るオプションもあります。
フックを付けないでプログラムをコンパイルする場合には、プログラム内の戦略点で Debug Tool を始動するために、CEETEST 呼び出しを使用することができます。この方法を使用する場合でも、アプリケーションは シンボリック情報が作成されるようにコンパイルする必要があります。
Debug Tool が既に初期設定されているときに CEETEST を使用すると、結果的に、ブレークポイントに類似した再入になります。
下図には、CEETEST の構文が記載されています。
C および C++ の場合

COBOL の場合

PL/I の場合

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:*;',*);
これらの呼び出しには末尾にセミコロン (;) が入っている必要があります。
言語環境プログラムは、フィードバック・コードのフィールドのデコードに役立つように、CEEDCOD と呼ばれる呼び出し可能サービスを提供します。フィードバック・コードを戻すように要求することをお勧めします。
C、C++ および COBOL の場合、Debug Tool が CALL CEETEST によって始動されているときに、GOTO コマンドを使用できるのは、Debug Tool が STEP または GO を介してユーザー・プログラムに制御を戻した後のみです。
次の例は、言語環境プログラムの呼び出し可能サービス CEETEST を使用して、C または C++ プログラムから 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);
}
#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);
·
·
·
}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 を使用して COBOL プログラムから 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.
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 を使用して PL/I プログラムから Debug Tool を始動する方法を示しています。
CALL CEETEST(*,*); /* omit arguments */
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);
コマンド・ストリングは、Debug Tool に渡されると、10 番目のステートメントが実行されるたびにブレークポイントが設定されます。ブレークポイントが設定されると、Debug Tool は現在場所の情報を表示し、実行を継続します。CEETEST 呼び出しの後、正しい実行が行われたかフィードバック・コードが検査されます。
%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);PL/I プログラムの場合、推奨される Debug Tool の始動方法は、組み込みサブルーチン PLITEST を使用することです。これは、CEETEST とまったく同じ方法で使用できますが、CEEIBMAW または CEEIBMCT の組み込み、あるいは宣言の実施が不要な点で異なります。
構文は次のとおりです。

次の例は、PLITEST を使用して Debug Tool を PL/I で始動する方法を示しています。
CALL PLITEST;
CALL PLITEST('At statement 23 Do; List X; End; Go; List Y;');
DCL ch Char(45) Init('At Statement 23 Do; List x; End;');
CALL PLITEST(ch);
C および C++ ライブラリー・ルーチン __ctest() または ctest() を使用して Debug Tool を始動することもできます。以下のステートメントをプログラムに追加して、
#include <ctest.h>
ctest() 関数を使用します。
__ctest() でコマンドのリストが指定されていると、Debug Tool はそのリスト内のコマンドを実行します。ヌル引数を指定した場合、Debug Tool は提供されたコマンド・ファイルからの読み取り、またはユーザーにプロンプトを出すことによってコマンドを入手します。コマンド・リスト内のすべてのコマンドを実行しないうちにアプリケーションに 制御が戻された場合、コマンド・リストの残りの部分は無視されます。Debug Tool は、指定されたコマンド・ファイルからの読み取りを続けるか、さらに入力を求めてプロンプトを出します。
フックを付けないでプログラムをコンパイルしたい場合、__ctest() 関数呼び出しを使用して、プログラム内の戦略点で Debug Tool を始動することができます。この方法を使用する場合でも、アプリケーションは シンボリック情報が作成されるようにコンパイルする必要があります。
Debug Tool が既に初期設定されているときに __ctest() を 使用すると、結果的に、ブレークポイントに類似した再入になります。
このオプションの構文は次のとおりです。

次の例は、C および C++ の場合の __ctest() の使用法 を示しています。
__ctest(NULL);
__ctest("at line 23 {"
" list x;"
" list y;"
"}"
"go;"
"list z;");
char *ch = "at line 23 list x;";
·
·
·
__ctest(ch);
#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));