다음을 통해 공유


디버거 프로그래밍 확장 API

이 단원에는 다음이 포함됩니다.

디버거 엔진 개요

디버거 엔진 API 사용

DbgEng 확장 작성

EngExtCpp 확장

WdbgExts 확장 작성

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

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

KDNET 전송 확장성 모듈 개발

이 설명서에서는 디버거 엔진에서 제공하는 인터페이스와 같은 인터페이스를 사용하여 WinDbg, KD, CDB 및 NTSD에서 실행되는 확장을 작성하는 방법을 설명합니다. 이러한 디버거 확장은 사용자 모드 또는 커널 모드 디버깅을 수행할 때 사용할 수 있습니다.

디버거 엔진

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

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

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

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

자세한 내용은 디버거 엔진 개요 및 디버거 엔진API 사용을 참조하세요.

확장

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

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

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

    자세한 내용은 DbgEng 확장 작성을 참조하세요.

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

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

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

Visual Studio를 사용하여 모든 디버거 확장을 컴파일하고 빌드해야 합니다.

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

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

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

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

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

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

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

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

KDNET 전송 확장성 모듈 개발

KDNET 전송은 별도의 하드웨어 드라이버 확장성 모듈 dll을 사용하여 모든 하드웨어에서 실행되도록 확장할 수 있습니다. KDNET 전송 확장성 모듈은 네트워크 카드 공급업체에서 개발하여 특정 네트워크 카드에 커널 디버깅 지원을 추가합니다.

KDNET은 네트워크를 통해 창을 커널 디버깅할 수 있는 커널 디버그 전송입니다. 하드웨어 지원 계층이 네트워크 패킷 처리 및 커널 인터페이스 계층과는 별도의 모듈에 기본 제공되도록 설계되었습니다. 이 하드웨어 드라이버 지원 계층을 KDNET 확장성 모듈이라고 합니다. 자세한 내용은 KDNET 전송 확장성 모듈 개발을 참조하세요.