Використання WPP Software Tracing в системному програмуванні

Шановний читач,
у своєму проекті ти напевно написав інструмент логування та з успіхом застосовуєш його для аналізу важко діагностованих багів. Але ти завжди стикався із ситуацією:
  • коли запис в файл — консоль драматично позначилася на воспроизодимости бага;
  • коли мульти(процесорний/потокове) додаток часто звертається до драйвера і ти не можеш порівняти часові мітки і потоки;
  • коли баг відтворюється на стороні кастомера, сеанс teamviewer марний, та до того ж версія з налагоджувальні символами private;
  • коли системне додаток падає до того, як система встигне скинути логування на диск;
  • або коли макрос для логування виглядає в кращому випадку як
    #define TraceDbg(format, ...) \
    printf( "(p %d, t %d) - (%s,%d) %s(): " format, GetCurrentProcessId(), GetCurrentThreadId(), __FILE__, __LINE__,__FUNCTION__, __VA_ARGS__ );
    
  • коли придумуєш черговий спосіб вивести на екран ipaddr або UUID
У статті я представлю швидкий, надійний і універсальний для налагодження з мінімальним оверхедом інструмент діагностики, пропонованої MS для системних додатків — WPP, розглянутий частково в публікації «EventTrace for Windows. Високошвидкісна передача налагоджувальних повідомлень драйвера по мережі».

Читати далі →