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


Разделы справки добавить префикс и суффикс в сообщение трассировки?

Вы можете использовать блок конфигурации препроцессора WPP для добавления данных в сообщения трассировки.

Блок конфигурации WPP определяется конфигурацией begin_wpp и операторами end_wpp, которые вы размещаете в исходном коде.

конфигурация begin_wpp

...

Блок конфигурации

...

end_wpp

Если данные конфигурации помещают в файл заголовка, укажите имя файла заголовка в свойствах проекта (для трассировки WPP). В разделе "Параметры файла" на странице свойств укажите файл конфигурации сканирования. Дополнительные сведения см . в препроцессоре WPP.

Синтаксис блока конфигурации

USEPREFIX (Function_Name, "Формат строки");
Определяет префикс строки формата, используемый при регистрации события. Первый параметр — это имя функции, к которой применяется этот префикс. Второй параметр — это строка форматирования, используемая. Чтобы использовать значение по умолчанию, укажите %! STDPREFIX!. Префикс сообщения трассировки по умолчанию указывает номер ЦП, идентификатор процесса, идентификатор потока, метку времени в формате UTC и понятное имя GUID элемента управления.

//USEPREFIX (TRACE_RETURN, "%!STDPREFIX!");

FUNC Function_Name{args}(EXP);
Определяет имя и подпись функции трассировки. Фигурные скобки { } используются для определения заданных значений для функции. В следующем примере функция принимает один аргумент и не имеет строки формата, а значение LEVEL имеет значение ERROR.

//FUNC TRACE_RETURN{LEVEL=ERROR}(EXP);

USESUFFIX (Function_Name, "Формат строки");
Определяет суффикс строки формата, используемый при регистрации события. Первый параметр — это имя функции, к которой применяется этот суффикс. Второй параметр — это строка форматирования, используемая. В коде можно использовать имена переменных.

//USESUFFIX (TRACE_RETURN, "Function Return=%!HRESULT!",EXP);

Пример блока конфигурации

В следующем примере определяется макрос трассировки, использующий префикс строки формата и суффикс. Если вы определяете макрос трассировки, необходимо также определить макросы, чтобы выбрать средство ведения журнала и проверить, следует ли регистрировать событие.

//MACRO: TRACE_RETURN
//
//begin_wpp config
//USEPREFIX (TRACE_RETURN, "%!STDPREFIX!");
//FUNC TRACE_RETURN{LEVEL=ERROR}(EXP);
//USESUFFIX (TRACE_RETURN, "Function Return=%!HRESULT!",EXP);
//end_wpp

//
// The next two macros are for checking if the event should be logged, and for
// choosing the logger handle to use when calling the ETW trace API
//
#define WPP_LEVEL_EXP_ENABLED(LEVEL, HR) WPP_FLAG_ENABLED(LEVEL)
#define WPP_LEVEL_EXP_LOGGER(LEVEL, HR) WPP_FLAG_LOGGER(LEVEL)

Пример результатов трассировки

[0]0F78.0460::06/24/2006-15:54:54.880 [tracedrv]Function Return=0x8000000f(STATUS_DEVICE_POWERED_OFF)