Поделиться через


Как включить отладку без запуска сеанса трассировки 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