디버거 엔진 소개

이 설명서에서는 디버거 엔진을 사용하는 방법과 WinDbg, KD, CDB 및 NTSD에서 실행되는 확장을 작성하는 방법을 설명합니다. 이러한 디버거 확장은 Microsoft Windows에서 사용자 모드 또는 커널 모드 디버깅을 수행할 때 사용할 수 있습니다.

디버거 엔진

디버거 엔진은 Microsoft Windows의 사용자 모드 및 커널 모드에서 디버깅 대상을 검사하고 조작하기 위한 인터페이스를 제공합니다.

디버거 엔진은 대상을 획득하고, 중단점을 설정하고, 이벤트를 모니터링하고, 기호를 쿼리하고, 메모리를 읽고 쓰고, 대상의 스레드와 프로세스를 제어할 수 있습니다.

디버거 엔진을 사용하여 디버거 확장 라이브러리와 독립 실행형 애플리케이션을 모두 작성할 수 있습니다. 이러한 애플리케이션은 디버거 엔진 애플리케이션입니다. 디버거 엔진의 전체 기능을 사용하는 디버거 엔진 애플리케이션은 디버거입니다. 예를 들어 WinDbg, CDB, NTSD 및 KD는 디버거입니다. 디버거 엔진은 해당 기능의 핵심을 제공합니다.

디버거 엔진 API는 헤더 파일 dbgeng.h의 프로토타입에 의해 지정됩니다.

불완전한 설명서

이 문서는 예비 문서이며 현재 불완전합니다.

아직 여기에 문서화되지 않은 디버거 및 디버거 엔진과 관련된 많은 개념은 이 설명서의 디버깅 기술 섹션을 참조하세요.

디버거 엔진 API의 현재 문서화되지 않은 기능 중 일부를 가져오려면 Execute 메서드를 사용하여 개별 디버거 명령을 실행합니다.

확장

확장 DLL을 작성하고 빌드하여 고유한 디버깅 명령을 만들 수 있습니다. 예를 들어 확장 명령을 작성하여 복잡한 데이터 구조를 표시할 수 있습니다.

디버거 확장 DLL에는 세 가지 유형이 있습니다.

  • DbgEng 확장 DLL. dbgeng.h 헤더 파일의 프로토타입을 기반으로 합니다. 이 유형의 각 DLL은 DbgEng 확장 명령을 내보낼 수 있습니다. 이러한 확장 명령은 디버거 엔진 API를 사용하며 WdbgExts API를 사용할 수도 있습니다.

  • EngExtCpp 확장 DLL. 이는 engextcpp.h 및 dbgeng.h 헤더 파일의 프로토타입을 기반으로 합니다. 이 유형의 각 DLL은 DbgEng 확장 명령을 내보낼 수 있습니다. 이러한 확장 명령은 디버거 엔진 API와 EngExtCpp 확장 프레임워크를 모두 사용하며 WdbgExts API를 사용할 수도 있습니다.

  • WdbgExts 확장 DLL. wdbgexts.h 헤더 파일의 프로토타입을 기반으로 합니다. 이 형식의 각 DLL은 하나 이상의 WdbgExts 확장 명령을 내보냅니다. 이러한 확장 명령은 WdbgExts API를 단독으로 사용합니다.

DbgEng API를 사용하여 확장 또는 독립 실행형 애플리케이션을 만들 수 있습니다. WdbgExts API에는 디버거 엔진 API 기능의 하위 집합이 포함되어 있으며 확장에서만 사용할 수 있습니다.

빌드 유틸리티를 사용하여 모든 디버거 확장을 컴파일하고 빌드해야 합니다. 빌드 유틸리티는 WDK(Windows 드라이버 키트)에 포함되어 있습니다.

확장 코드 샘플은 사용자 지정 설치를 수행하고 SDK 구성 요소 및 모든 하위 구성 요소를 선택하는 경우 Windows용 디버깅 도구 패키지의 일부로 설치됩니다. Windows용 디버깅 도구 설치 디렉터리의 sdk\samples 하위 디렉터리에서 찾을 수 있습니다.

새 디버거 확장을 작성하는 가장 쉬운 방법은 샘플 확장을 연구하는 것입니다. 각 샘플 확장에는 빌드 유틸리티와 함께 사용할 메이크파일 및 원본 파일이 포함됩니다. 두 가지 유형의 확장이 모두 샘플에 표시됩니다.

사용자 지정 분석 디버거 확장 작성

분석 확장 플러그 인을 작성하여 !analyze 디버거 명령의 기능을 확장할 수 있습니다. 분석 확장 플러그 인을 제공하여 사용자 고유의 구성 요소 또는 애플리케이션과 관련된 방식으로 버그 검사 또는 예외 분석에 참여할 수 있습니다. 분석 확장 플러그 인을 작성할 때 플러그 인을 호출하려는 상황을 설명하는 메타데이터 파일도 작성합니다. !analyze가 실행되면 적절한 분석 확장 플러그 인을 찾고, 로드하고, 실행합니다. 자세한 내용은 사용자 지정 분석 디버거 확장 작성을 참조하세요.

DML을 사용하여 디버거 출력 사용자 지정

DML을 사용하여 디버거 출력을 사용자 지정할 수 있습니다. 자세한 내용은 DML을 사용하여 디버거 출력 사용자 지정을 참조하세요.

JavaScript를 사용하여 디버거의 기능 확장

JavaScript를 사용하여 디버거 개체를 이해하고 디버거의 기능을 확장하고 사용자 지정하는 스크립트를 만듭니다. JavaScript 공급자는 스크립팅 언어를 디버거의 내부 개체 모델에 연결합니다. JavaScript 디버거 스크립팅 공급자를 사용하면 에서 디버거와 함께 JavaScript를 사용할 수 있습니다. 자세한 내용은 JavaScript 디버거 스크립팅을 참조하세요.