이 절의 지침은 Language Environment에서 실행되는 프로그램에 적용됩니다. Language Environment에서 실행되지 않는 프로그램에 대해서는 Language Environment 외부에서 시작되는 프로그램에 대해 Debug Tool 시작에 설명된 지침을 참조하십시오.
이 주제에서는 TEST 런타임 옵션을 사용하는 경우 고려해야 할 몇 가지 요소를 설명하고, 예제를 제공하고, 지정해야 하는 다른 런타임 옵션을 설명합니다. TEST 런타임 옵션의 구문은 Debug Tool Reference and Messages의 TEST 런타임 옵션 주제에서 설명합니다.
Debug Tool이 애플리케이션의 제어를 얻고 디버그 세션을 시작하는 방법을 지정하려면 TEST 런타임 옵션을 사용하십시오. TEST 옵션의 가장 간단한 양식은 하위 옵션을 지정하지 않은 TEST이지만 하위 옵션을 지정하는 것이 보다 유연할 수 있습니다. 사용 가능한 하위 옵션의 유형에는 네 가지가 있으며 다음과 같습니다.
TEST 런타임 옵션을 사용할 경우 이 절에서 설명하는 몇 가지 사항을 고려해야 합니다.
C, C++ 또는 PL/I의 경우 #pragma runopts 또는 PLIXOPT 문자열을 사용하여 하위 옵션과 함께 TEST를 정의한 후 런타임에 하위 옵션 없이 TEST를 지정할 수 있습니다. 이것은 #pragma runopts 또는 PLIXOPT 문자열에 지정된 하위 옵션이 적용됩니다.
SET TEST 명령을 사용하여 언제든지 TEST/NOTEST 런타임 옵션을 변경할 수 있습니다.
일부 하위 옵션은 NOTEST로 사용 불가능하게 설정할 수 있지만 여전히 허용됩니다. 그러므로 NOTEST 옵션을 사용하여 프로그램을 시작하고 나중에 디버그 세션에 적용할 하위 옵션을 지정할 수 있습니다. Debug Tool의 제어없이 프로그램이 실행을 시작합니다.
지정된 하위 옵션을 NOTEST를 사용하여 사용 가능하게 하려면 CEETEST, PLITEST 또는 __ctest() 함수와 같은 라이브러리 서비스 호출을 사용하여 프로그램 런타임 중에 Debug Tool을 시작하십시오.
적용된 테스트 레벨로 인해 Debug Tool이 조건 또는 특정 프로그램 위치에서 제어하면 연관된 액션이 없는 암시적 중단점이 가정됩니다. 이러한 가정은 초기 명령 문자열 또는 기본 명령 파일을 사용하여 해당 조건이나 위치에 대해 중단점이 정의되지 않은 경우에도 해당됩니다. 터미널 또는 기본 명령 파일에 대한 제어가 제공됩니다.
기본 명령 파일은 대리 터미널로 작동합니다. 기본 명령 파일에 명령의 소스로 액세스한 후 모든 명령이 실행되거나 애플리케이션이 종료될 때까지 이 기능은 계속 작동합니다. 이러한 작동은 프로그램으로 제어를 리턴하는 명령(예: STEP 또는 GO)이 USE 파일에 포함된 경우 모든 후속 명령이 삭제된다는 점에서 USE 파일과 다릅니다. 그러나 기본 명령 파일 내에서 시작된 USE 파일에는 기본 명령 파일의 특성이 있으며 완료될 때까지 실행될 수 있습니다.
초기 명령 목록은 런타임 옵션 또는 기본 명령 파일에 포함된 명령 문자열로 구성되는지에 따라 보조 파일에서 명령을 가져오는 USE 명령을 포함할 수 있습니다. 기본 명령 파일에서 시작되는 USE 파일은 기본 명령 파일의 특성을 갖습니다.
Batch 모드에서 명령 파일의 끝에 도달하면 프로그램이 종료될 때까지 명령에 대한 각 요청에서 GO 명령이 실행됩니다. 프로그램 종료 후 다른 명령이 요청되면 QUIT 명령이 강제 실행됩니다.
프로그램 초기화 중에 Debug Tool이 시작되면 기본 프롤로그의 모든 지시사항이 실행되기 전에 시작됩니다. 시작될 때 프로그램 블록이 활성화되지 않고 기본 프로시저의 변수를 참조할 수 없으며 컴파일 단위를 호출할 수 없고 GOTO 명령을 사용할 수 없습니다. 그러나 정적 변수는 참조할 수 있습니다.
다른 명령을 입력하기 전에 STEP 명령을 입력하면 프로그램 및 Language Environment 초기화가 완료되고 모든 변수에 대한 액세스 권한이 부여됩니다. 모든 올바른 명령도 입력할 수 있습니다.
프로그램이 실행되는 동안(예: CEETEST 호출을 사용하여) Debug Tool이 시작되면 애플리케이션과 연관된 모든 컴파일 단위를 찾지 못할 수 있습니다. 현재 활성화되지 않은 로드 모듈에 있는 컴파일 단위는 Debug Tool 초기화 전에 실행되었더라도 Debug Tool에 알려지지 않습니다.
예를 들어, 로드 모듈 mod1에 컴파일 단위 cu1과 cu2가 포함되며 둘 다 TEST 옵션으로 컴파일되었다고 가정해보십시오. 컴파일 단위 cu1은 처리 완료 후 리턴하는 로드 모듈 mod2에 포함된 cux를 호출합니다. 컴파일 단위 cu2에는 CEETEST 라이브러리 서비스 호출이 포함됩니다. CEETEST 호출이 Debug Tool을 초기화하면 cu1과 cu2만 Debug Tool에 알려집니다. Debug Tool은 cux를 인식하지 않습니다.
초기 명령 문자열은 Debug Tool이 프로세스에서 처음 초기화될 때 한 번만 실행됩니다.
환경 설정 파일의 명령은 Debug Tool이 프로세스에서 처음 초기화될 때 한 번만 실행됩니다.
세션 로그는 입력한 명령과 명령 실행 결과를 저장합니다. 세션 로그는 명령 실행 결과를 설명으로 저장합니다. 그러므로 세션 로그를 명령 파일로 사용할 수 있습니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
Language Environment 런타임 옵션에는 다음과 같은 우선순위(최고에서 최저까지)가 있습니다.
소스 프로그램의 오브젝트 모듈이 CEEUOPT 오브젝트 모듈보다 먼저 연계 편집기에 입력되면 이러한 옵션은 CEEUOPT 기본값을 무시합니다. 연계 편집기 제어 명령문을 사용하여 오브젝트 모듈이 입력되는 순서를 강제 실행할 수 있습니다.
하위 옵션은 다음 순으로 처리됩니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
프로그램에 사용할 수 있는 런타임 옵션을 설명하기 위해 TEST 런타임 옵션 사용에 대한 다음 예제를 제공합니다. 모든 명령을 설명하지는 않습니다. TEST 런타임 옵션의 전체 구문은 Debug Tool Reference and Messages를 참조하십시오.
NOTEST를 지정하고 Debug Tool이 처음 활성화된 프로그램에서 제어가 리턴되면 더 이상 비Language Environment 프로그램을 디버깅하거나 비Language Environment 이벤트를 발견할 수 없습니다.
하위 옵션에 대한 다른 정의가 없으면 IBM 제공 기본 하위 옵션(ALL, *, PROMPT, INSPREF)이 사용됩니다.
TEST(,,,TCPIP&machine.somewhere.something.com%8001:*) TEST(,,,TCPIP&9.24.104.79%8001:*) NOTEST(,,,TCPIP&9.24.111.55%8001:*)
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.
COBOL과 PL/I 프로그램을 디버깅하도록 지정하기 위해 두 개의 추가 런타임 옵션, 즉 STORAGE와 TRAP(ON)이 필요할 수 있습니다.
STORAGE 런타임 옵션은 할당되고 확보될 때 스토리지의 초기 컨텐츠와 "스토리지 부족" 조건을 위해 예약된 스토리지의 양을 제어합니다. STORAGE 런타임 옵션에 매개변수 중 하나를 지정하면 매개변수가 처리한 할당된 모든 스토리지가 해당 값으로 초기화됩니다. 프로그램에 자체 초기화 변수가 없는 경우 STORAGE 런타임 옵션을 지정해야 합니다.
TRAP(ON) 런타임 옵션은 Debug Tool로 예외를 전달하는 Language Environment 조건 핸들러를 완전히 사용 가능하게 하는 데 사용됩니다. 이 옵션은 TEST 옵션과 함께, 예외가 발생할 때 Debug Tool이 자동으로 제어하게 할 경우에 사용해야 합니다. GO BYPASS 명령을 사용하고 기록된 핸들러를 디버깅할 경우에도 TRAP(ON) 런타임 옵션을 사용해야 합니다. TRAP(OFF)를 Debug Tool에서 사용하면 조건, 이상 종료 또는 인터럽트가 발생할 때 운영 체제에서 해당 애플리케이션과 Debug Tool을 취소하는 등의 예기치 않은 결과가 발생할 수 있습니다.
TEST 런타임 옵션은 프로그램을 시작하거나 #pragma를 사용하여 소스에서 직접 시작할 때 지정할 수 있습니다.
#pragma runopts (test(suboption,suboption...))
#pragma는 소스 파일의 첫 번째 명령문보다 먼저 표시되어야 합니다. 예를 들어, 소스에서 다음을 지정한 경우
#pragma runopts (notest(all,*,prompt))
명령행에 TEST를 입력하면 결과는 다음과 같습니다.
TEST(ALL,*,PROMPT).
TEST는 TEST가 자체의 하위 옵션을 포함하지 않으므로 #pragma에 지정된 NOTEST 옵션을 대체하며 하위 옵션 ALL, * 및 PROMPT는 유효합니다.
다른 #pragmas로 둘 이상의 컴파일 단위를 함께 링크하면 첫 번째 컴파일로 지정된 옵션이 사용됩니다. enclave가 여러 개인 경우 새로운 각 프로세스에서 시작된 첫 번째 enclave(컴파일 단위)로 지정된 옵션이 사용됩니다.
명령행과 #pragma에 옵션을 지정한 경우 NOEXECOPS를 지정하지 않는 한, 명령행에 입력한 옵션은 #pragma에 지정된 옵션보다 우선합니다. NOEXECOPS를 #pragma에 지정하거나 EXECOPS 컴파일 옵션으로 지정하면 명령행 옵션이 적용되지 않습니다.
이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.