다음을 통해 공유


ETW 추적 세션을 시작하지 않고 디버깅을 사용하도록 설정할 어떻게 할까요? 있나요?

ETW 추적 세션을 시작하지 않고 문제를 디버그하려면 소스 코드에 WPP_DEBUG 매크로 정의를 추가합니다.

다음은 WDK Tracedrv.sys 샘플 드라이버의 예입니다.

#define WPP_DEBUG(b) DbgPrint b, DbgPrint("\n")

대부분의 형식과 인수는 WPP_DEBUG 사용할 수 있습니다. 그러나 %! 같은 확장 형식 사양은 사용할 수 없습니다. 이 매크로를 사용하여 HEXDUMP!%

사용자 모드 디버거에 추적 메시지 보내기도 어떻게 할까요? 참조하세요.

커널 디버거를 사용하는 경우

커널 디버거를 사용하는 경우 WPP 컨트롤 구조에 대한 수준 및 플래그 값을 설정합니다.

  1. 다음과 같이 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
    
  2. 다음과 같이 수준 값을 5 로 설정하고 플래그를 0xf 설정합니다.

    kd>eb 9fbf305d 5    // setting the level value to 5
    
    kd>ed 9fbf3060 0xf    // setting the flag value to 0xf
    
  3. (Windows Vista 이상 버전의 Windows) 다음과 같이 필터 마스크를 사용하여 메시지를 받습니다.

    kd>ed nt!Kd_DEFAULT_Mask 0xff