DbgEng 확장 DLL의 구조
DbgEng 확장 DLL은 여러 콜백 함수를 내보내며, 그 중 일부는 확장 명령의 구현일 수 있습니다.
이러한 확장 DLL은 디버거 엔진에 의해 로드되며 Microsoft Windows 사용자 모드 또는 커널 모드 디버깅을 수행하는 동안 추가 기능 또는 작업 자동화를 제공할 수 있습니다.
Windows 디버깅 도구의 전체 설치를 수행한 경우 설치 디렉터리의 sdk\samples\exts 하위 디렉터리에서 "exts"라는 샘플 DbgEng 확장을 찾을 수 있습니다.
확장 명령
확장 DLL은 확장 명령을 실행하는 데 사용되는 여러 함수를 내보낼 수 있습니다. 각 함수는 .def 파일에서 내보내기로 명시적으로 선언되며 해당 이름은 전적으로 소문자로 구성되어야 합니다.
확장 명령을 구현하는 데 사용되는 함수는 프로토타입 PDEBUG_EXTENSION_CALL 일치해야 합니다.
이러한 함수는 대문자가 허용되지 않는다는 점을 제외하고 표준 C++ 규칙에 따라 이름이 지정됩니다. 확장 명령이 느낌표(!)로 시작한다는 점을 제외하고 내보낸 함수 이름과 확장 명령 이름은 동일합니다. 예를 들어 디버거에 myextension.dll 로드한 다음 디버거 명령 창에 !stack 을 입력하면 디버거는 myextension.dll 내보낸 함수 스택 을 찾습니다.
myextension.dll 아직 로드되지 않았거나 다른 확장 DLL에 이름이 같은 다른 확장 명령이 있는 경우 디버거 명령 창에 !myextension.stack 을 입력하여 확장 DLL 및 해당 DLL의 확장 명령을 나타낼 수 있습니다.
다른 내보낸 함수
DbgEng 확장 DLL 은 DebugExtensionInitialize를 내보내야 합니다. DLL을 초기화하기 위해 DLL이 로드될 때 호출됩니다. DLL에서 전역 변수를 초기화하는 데 사용할 수 있습니다.
확장 DLL은 DebugExtensionUninitialize를 내보낼 수 있습니다. 내보낸 경우 확장 DLL이 언로드되기 전에 호출됩니다. DLL이 언로드되기 전에 정리하는 데 사용할 수 있습니다.
확장 DLL은 DebugExtensionNotify를 내보낼 수 있습니다. 내보낸 경우 세션이 시작 또는 종료되고 대상이 실행을 시작하거나 중지할 때 호출됩니다. 이러한 알림은 클라이언트에 등록된 IDebugEventCallbacks 개체에도 제공됩니다.
확장 DLL은 KnownStructOutput을 내보낼 수 있습니다. 내보낸 경우 DLL이 로드될 때 호출됩니다. 이 함수는 DLL에서 한 줄로 인쇄하는 방법을 알고 있는 구조 목록을 반환합니다. 나중에 인쇄를 위해 이러한 구조체의 인스턴스에 서식을 지정하기 위해 호출할 수 있습니다.
DbgEng 확장 DLL 로드를 위한 엔진 프로시저
확장 DLL이 로드되면 콜백 함수는 엔진에서 다음 순서로 호출됩니다.
확장 DLL이 초기화할 수 있도록 DebugExtensionInitialize가 호출됩니다.
내보낸 경우 엔진에 활성 세션이 있으면 DebugExtensionNotify 가 호출되고 세션이 일시 중단되고 액세스할 수 있는 경우 다시 호출됩니다.
내보낸 경우 KnownStructOutput 이 호출되어 DLL에서 한 줄로 인쇄하는 방법을 알고 있는 구조 목록을 요청합니다.
디버거를 사용하여 확장 DLL을 로드 및 언로드하는 방법에 대한 자세한 내용은 디버거 확장 DLL 로드를 참조하고 확장 명령 실행에 대한 자세한 내용은 디버거 확장 명령 사용을 참조하세요.
디버거 엔진은 확장 DLL 호출 주위에 블록을 제외하고 try/ 를 배치합니다. 이렇게 하면 확장 코드의 일부 버그 유형으로부터 엔진을 보호합니다. 하지만 확장 호출은 엔진과 동일한 스레드에서 실행되므로 계속 작동이 중단될 수 있습니다.