ETW 추적 세션을 시작하지 않고 디버깅을 사용하도록 설정할 어떻게 할까요? 있나요?
ETW 추적 세션을 시작하지 않고 문제를 디버그하려면 소스 코드에 WPP_DEBUG 매크로 정의를 추가합니다.
다음은 WDK Tracedrv.sys 샘플 드라이버의 예입니다.
#define WPP_DEBUG(b) DbgPrint b, DbgPrint("\n")
대부분의 형식과 인수는 WPP_DEBUG 사용할 수 있습니다. 그러나 %! 같은 확장 형식 사양은 사용할 수 없습니다. 이 매크로를 사용하여 HEXDUMP!%
사용자 모드 디버거에 추적 메시지 보내기도 어떻게 할까요? 참조하세요.
커널 디버거를 사용하는 경우
커널 디버거를 사용하는 경우 WPP 컨트롤 구조에 대한 수준 및 플래그 값을 설정합니다.
다음과 같이 WPP 컨트롤 구조의 주소를 찾습니다.
kd> x tracedrv!WPP_MAIN_CB // tracedrv is the WPP instrumented driver 9fbf3040 tracedrv!WPP_MAIN_CB = union WPP_PROJECT_CONTROL_BLOCK [1] kd>dt WPP_TRACE_CONTROL_BLOCK 9fbf3040 +0x000 Callback : 0x9fbf127c tracedrv!WppTraceCallback+0 +0x004 ControlGuid : 0x9fbf206c _GUID {d58c126f-b309-11d1-969e-0000f875a5bc} +0x008 Next : (null) +0x010 Logger : 0 +0x018 RegistryPath : (null) +0x01c FlagsLen : 0x1 '' +0x01d Level : 0x0 '' <--- Set the Level +0x01e Reserved : 0 +0x020 Flags : [1] 0x0 <--- Set the Flag
다음과 같이 수준 값을 5 로 설정하고 플래그를 0xf 설정합니다.
kd>eb 9fbf305d 5 // setting the level value to 5
kd>ed 9fbf3060 0xf // setting the flag value to 0xf
(Windows Vista 이상 버전의 Windows) 다음과 같이 필터 마스크를 사용하여 메시지를 받습니다.
kd>ed nt!Kd_DEFAULT_Mask 0xff