복잡한 애플리케이션에서 문제점 해결

이 절에서는 복잡한 애플리케이션을 디버깅하는 동안 발생할 수 있는 일부 문제에 대해 설명하고 가능한 솔루션에 대해 설명합니다.

LLA(Library Lookaside)에서 로드된 프로그램 디버깅

Debug Tool이 바인더 API를 사용하여 메모리의 프로그램 정보를 얻습니다. 바인더 API가 로드 모듈 또는 프로그램 오브젝트를 포함하는 데이터셋에 저장된 정보에 액세스해야 합니다. 대부분의 경우, z/OS®가 프로그램이 로드된 데이터셋명을 Debug Tool에 제공하여 Debug Tool이 바인더 API로 전달할 수 있습니다. 하지만 z/OS에는 LLA에서 로드된 프로그램의 해당 정보가 없습니다.

Debug Tool이 LLA에서 로드된 프로그램을 디버그하려 할 때 Debug Tool이 다음 단계를 수행합니다.

다음 제한사항이 적용됩니다.

시스템 접두부 이름을 사용하는 사용자 프로그램 디버깅

Debug Tool은 특정 접두부로 시작하는 로드 모듈 및 컴파일 단위 이름은 시스템 컴포넌트라고 간주합니다. 예를 들어, EQAxxxxx는 Debug Tool 모듈, CEExxxxx는 Language Environment 모듈 및 IGZxxxxx는 COBOL 모듈입니다.

Debug Tool은 다음 이유로 인해 이러한 접두부를 갖는 로드 모듈 또는 컴파일 단위를 디버깅하지 않습니다.

사용자 로드 모듈 또는 컴파일 단위의 이름을 이러한 시스템 접두부 중 하나와 충돌하는 접두부를 사용하여 지정한 경우 NAMES INCLUDE 명령 및 이 절에 설명된 지시사항을 사용하여 해당 로드 모듈 또는 컴파일 단위를 디버깅할 수 있습니다.

중요사항:
NAMES INCLUDE 명령을 사용하여 시스템 컴포넌트(예: Debug Tool, Language Environment, CICS®, IMS™ 또는 컴파일러 런타임 모듈)를 디버깅하지 마십시오. 이러한 시스템 컴포넌트를 디버깅하는 경우, 예기치 않은 장애가 발생할 수 있습니다. 이 명령은 Debug Tool에서 시스템 컴포넌트로 인식하는 접두부로 이름 지정된 user 프로그램을 디버깅하는 데만 사용하십시오.

시스템 접두부 표시

다음 명령을 사용하면 Debug Tool에서 시스템 접두부로 인식하는 접두부의 목록을 표시할 수 있습니다.

NAMES DISPLAY ALL EXCLUDED LOADMODS;
NAMES DISPLAY ALL EXCLUDED CUS;

이 명령은 사용자의 요청에서 현재 제외(NAMES EXCLUDE 명령 사용)된 이름의 목록을 표시하며, 그 다음에는 Debug Tool에 의해 제외된 이름의 목록을 표시하는 섹션을 표시합니다.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

시스템 컴포넌트와 유사한 이름의 프로그램 디버깅

프로그램명이 Debug Tool에 의해 제외된 접두부 중 하나로 시작하는 경우 NAMES INCLUDE 명령을 사용하여 Debug Tool에 해당 프로그램이 시스템 프로그램이 아닌 사용자 로드 모듈 또는 컴파일 단위임을 나타내십시오.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

데이터 전용 모듈이 포함된 프로그램 디버깅

일부 프로그램에는 실행 코드가 없는 로드 모듈 또는 컴파일 단위가 포함되어 있습니다. 이러한 모듈은 데이터 전용 모듈이라고 하며 어셈블러 프로그램에서 일반적인 모듈입니다. 일부 경우에 Debug Tool은 이러한 모듈에 실행 가능한 명령어가 없다는 사실을 인식하지 못하고 중단점을 설정하려고 합니다. 즉, 이러한 모듈의 내용을 오버레이합니다.

이 경우, NAMES EXCLUDE 명령을 사용하여 해당 모듈은 실행 가능 코드가 없는 데이터 전용 모듈임을 Debug Tool에 나타낼 수 있습니다. 그러면 Debug Tool은 해당 데이터 전용 모듈에 중단점을 설정하지 않습니다. NAMES EXCLUDE 명령을 사용하여 실행 가능한 명령어를 포함하는 모듈을 제외하는 경우, 해당 모듈이 Debug Tool에 계속 표시될 수 있으며 Debug Tool이 여전히 이 모듈에 중단점을 설정하려 할 수 있습니다.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

대규모 애플리케이션의 디버깅 최적화

Debug Tool은 TEST 또는 DEBUG 컴파일러 옵션으로 컴파일된 모든 컴파일 단위에 대한 디버그 데이터를 로드하기 위해 디자인되었습니다. 그러나 일부 매우 큰 애플리케이션에는 디버그할 필요가 없는 많은 수의 로드 모듈 또는 컴파일 단위가 들어 있을 수 있습니다. 이러한 로드 모듈 또는 컴파일 단위에 대한 디버그 데이터를 작성 및 조작하려면 막대한 양의 메모리, CPU 시간 및 기타 리소스를 소비할 수도 있습니다.

이 상황을 다음 방법 중 하나로 처리할 수 있습니다.

명시 디버그 모드를 사용하여 특정 모듈의 디버그 데이터만을 로드

기본적으로 Debug Tool은 TEST 또는 DEBUG 컴파일러 옵션으로 컴파일된 고급 언어 컴파일러 단위가 생길 때마다 자동으로 디버그 데이터를 로드합니다. 대부분의 경우 이는 어떤 로드 모듈과 컴파일 단위를 디버그할 지 여부를 미리 결정할 필요가 없으므로 가장 편리한 조작 모드입니다. 그러나 몇몇 복잡한 애플리케이션에서는 이 데이터를 조작하면 중대한 성능 영향을 초래할 수도 있습니다. 이 경우, 명시적 디버그 모드를 사용하여 디버그하려고 표시한 컴파일 단위의 디버그 데이터만 로드할 수 있습니다.

'SET EXPLICITDEBUG ON 명령을 입력하거나 EQAOPTS EXPLICITDEBUG 명령을 지정하여 명시 디버그 모드를 사용 가능으로 설정합니다. 기본적으로 이 모드는 OFF 상태입니다. 명시 디버그 모드에서는(아래 설명된 경우는 예외) LOADDEBUGDATA(LDD) 명령을 사용하여 Debug Tool이 디버그할 컴파일 단위의 디버그 데이터를 로드하도록 해야 합니다.

대부분의 경우 SET EXPLICTDEBUG 명령을 사용하여 명시 디버그 모드를 사용 가능으로 설정할 수 있지만 일부 경우에는 EQAOPTS EXPLICITDEBUG 명령을 사용해야 할 수도 있습니다. Debug Tool은 초기 로드 모듈 및 포함된 모든 컴파일 단위를 처리하기 전까지는 명령을 처리하지 않으므로 Debug Tool이 초기 로드 모듈에서 컴파일 단위의 디버그 데이터를 로드하지 않기를 원하는 경우에는 EQAOPTS EXPLICITDEBUG 명령을 사용하십시오.

명시 디버그 모드가 활성이면 Debug Tool은 다음 경우에만 디버그 데이터를 로드합니다.

Debug Tool은 명시적 디버그 모드에서 SET DISASSEMBLY ON 명령을 지원하지 않습니다. 명시적 디버그 모드가 활성이면 Debug Tool은 SET DISASSEMBLY OFF를 강제 실행하고 사용자를 명시 디버그 모드에 있는 경우에는 이를 ON으로 다시 설정할 수 없습니다.

특정 로드 모듈 및 컴파일 단위 제외

어떤 경우에는 디버그하고 싶지 않은 특정 로드 모듈 또는 컴파일 단위가 있음을 알 수도 있습니다. 이 경우에는 Debug Tool에게 이러한 로드 모듈 또는 컴파일 단위의 디버그 데이터를 로드하지 않도록 알려서 성능을 향상시킬 수 있습니다.

NAMES EXCLUDE 명령을 사용하면 Debug Tool에 해당 모듈에 대한 디버그 데이터를 유지보수할 필요가 없다고 나타낼 수 있습니다. NAMES EXCLUDE 명령을 실행하여 실행 가능 모듈을 제외하는 경우에 제외된 모듈에 대한 디버그 데이터가 Debug Tool에 필요한 경우가 있습니다. 포괄적이지는 않지만 다음 목록에서는 일부 가능한 상황에 대해 설명합니다.

또한 지연된 AT ENTRY 명령을 실행할 때 Debug Tool은 지연된 AT ENTRY의 대상인 로드 모듈 및 컴파일 단위에 대해 암시적 NAMES INCLUDE 명령을 생성합니다. 이후에 이 이름이 프로그램에 표시되면 Debug Tool은 이전 NAMES EXCLUDE 명령에 이 이름을 지정한 경우에도 이를 제외시키지 않습니다.

위의 모든 상황에서 Debug Tool은 필요한 대로 디버그 데이터를 로드하고 이 모듈이 Debug Tool에서 인식됩니다.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

현재의 NAMES 설정 표시

NAMES 명령의 현재 설정을 표시하려면 NAMES DISPLAY 명령을 사용하십시오.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.

EQAOPTS NAMES 명령을 사용하여 초기 로드 모듈 포함 또는 제외

이미 Debug Tool에 알려져 있는 로드 모듈 또는 컴파일 단위에 NAMES 명령을 사용할 수 없습니다. 따라서 NAMES 명령을 사용하여 Debug Tool에 초기 로드 모듈 또는 초기 로드 모듈에 포함된 컴파일 단위를 포함하거나 제외한다는 것을 나타낼 수 없습니다. 이를 수행하려면 런타임 시 또는 EQAOPTS 로드 모듈을 통해서 EQAOPTS NAMES 명령을 지정해야 합니다. EQAOPTS 명령을 지정하는 방법을 학습하려면 Debug Tool Reference and Messages 또는 Debug Tool Customization Guide에서 『EQAOPTS 명령』 주제를 참조하십시오.

이 절에서 설명하는 자료와 연관된 자세한 정보에 대해서는 다음 주제를 참조하십시오.