이 절의 지침은 Language Environment에서 실행되는 프로그램에 적용됩니다. Language Environment에서 실행되지 않는 프로그램에 대해서는 Language Environment 외부에서 시작되는 프로그램에 대해 Debug Tool 시작에 설명된 지침을 참조하십시오.
다음 중 하나를 사용하여 Debug Tool을 프로그램 내에서 직접 시작할 수도 있습니다.
그러나 PROGRAM TYPE이 SUB인 DB2® 스토어드 프로시저에서는 이 메소드를 사용할 수 없습니다.
이러한 메소드를 사용하여 Debug Tool을 시작할 경우 비Language Environment 프로그램을 디버깅할 수 있으며 Debug Tool이 처음에 표시되는 enclave와 후속 enclave에서만 비Language Environment 이벤트를 발견할 수 있습니다. 상위 레벨 enclave에서는 비Language Environment 프로그램을 디버깅하거나 비Language Environment 이벤트를 검색할 수 없습니다.
다음과 같은 다른 방법을 사용하여 Debug Tool을 시작할 경우에도 NOTEST, CEEUOPT 또는 기타 "indirect" 설정을 사용하여 지정된 TEST 하위 옵션을 알아야 합니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
CEETEST를 사용하여 프로그램 내에서 Debug Tool을 시작하고 명령 문자열을 보낼 수 있습니다. 명령 문자열이 지정되지 않았거나 명령 문자열이 충분하지 않으면 Debug Tool이 해당 터미널에서 명령을 확인하거나 명령 파일에서 명령을 읽습니다. 호출 프로시저의 성공 여부를 알려주는 피드백 코드를 받을 수도 있습니다.
후크를 사용하여 프로그램을 컴파일하지 않을 경우 CEETEST 호출을 사용하여 프로그램의 예상된 위치에서 Debug Tool을 시작할 수 있습니다. 이 메소드를 사용할 경우에도 기호 정보가 작성되도록 애플리케이션을 컴파일해야 합니다.
Debug Tool이 이미 초기화된 경우에 CEETEST를 사용하면 중단점과 유사한 재입력이 발생할 수 있습니다.
다음 다이어그램은 CEETEST의 구문에 대한 설명입니다.
C 및 C++의 경우

COBOL의 경우

PL/I의 경우

Debug Tool을 사용할 수 있으면 목록의 명령이 디버거로 전달됩니다.
string_of_commands이 생략되면 Debug Tool은 대화식 모드에서 명령을 확인합니다.
Debug Tool의 경우 명령이 72자를 초과할 경우 연속 문자를 사용하십시오.
명령 문자열의 첫 번째 명령은 다음 디버그 모드 중 하나로 Debug Tool을 시작할 수 있음을 표시합니다.
Debug Tool Terminal Interface Manager를 사용하지 않고 전용 터미널을 통한 전체 화면 모드에서 Debug Tool을 시작하도록 표시하려면 전용 터미널의 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 Terminal Interface Manager와 함께 전용 터미널을 통한 전체 화면 모드에서 Debug Tool을 시작하도록 표시하려면 Terminal Interface Manager에 제공한 사용자 ID와 함께 TEST 런타임 옵션의 VTAM® 하위 옵션을 지정하십시오. 예를 들어, PL/I 프로그램에서 다음 호출을 코딩할 수 있습니다.
Call CEETEST(VTAM%USERABCD:*;Query Location;Describe CUS;,*);
이 예제에서 하위 옵션 :*를 환경 설정 파일의 이름으로 바꿀 수 있습니다. TEST 런타임 옵션을 사용하여 Debug Tool을 시작하고 환경 설정 파일을 지정하고 CEETEST 호출에 다른 환경 설정 파일을 지정하면 CEETEST 호출의 환경 설정 파일은 지정된 환경 설정 파일을 TEST 런타임 옵션으로 바꿉니다.
원격 디버그 모드에서 Debug Tool을 시작하도록 표시하려면 원격 디버거가 청취할 포트 번호 및 IP 주소와 함께 TEST 런타임 옵션의 TCPIP 하위 옵션을 지정하십시오.
예를 들어, PL/I 프로그램에서 다음 호출을 코딩할 수 있습니다.
Call CEETEST('TCPIP&your.company.com%8001:*;',*);
이러한 호출에는 후미 세미콜론(;)이 포함되어야 합니다.
Language Environment는 피드백 코드의 필드를 디코딩하도록 도와주는 CEEDCOD라는 호출 가능한 서비스를 제공합니다. 피드백 코드의 리턴을 요청하는 것이 좋습니다.
C, C++ 및 COBOL의 경우 Debug Tool이 CALL CEETEST를 통해 시작되면 GOTO 명령은 Debug Tool이 STEP 또는 GO를 통해 제어를 프로그램으로 리턴한 후에만 허용됩니다.
다음 예제에서는 Language Environment 호출 가능한 서비스 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);
}
}
다음 예제에서는 Language Environment 호출 가능한 서비스 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.
다음 예제에서는 Language Environment 호출 가능한 서비스 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);
10번째 실행된 명령문마다 중단점을 설정하는 명령 문자열이 Debug Tool로 전달됩니다. 중단점에 도달하면 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를 사용하는 것입니다. CEEIBMAW 또는 CEEIBMCT를 포함하거나 선언을 수행할 필요가 없는 경우를 제외하고 CEETEST와 똑같이 사용할 수 있습니다.
구문은 다음과 같습니다.

다음 예제에서는 PLITEST를 사용하여 PL/I에서 Debug Tool을 시작하는 방법을 설명합니다.
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을 시작할 수도 있습니다. ctest() 함수를 사용하려면
#include <ctest.h>
를 해당 프로그램에 추가하십시오.
__ctest()를 사용하여 명령 목록이 지정되면 Debug Tool은 해당 목록의 명령을 실행합니다. 널(null) 인수를 지정하면 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));