如何在不启动 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