如何将前缀和后缀添加到跟踪消息?

可以使用 WPP 预处理器 配置块将数据添加到跟踪消息。

WPP 配置块由 你放置在源代码中的begin_wpp配置end_wpp 语句定义。

begin_wpp配置

...

配置块

...

end_wpp

如果将配置数据放在头文件中,请在项目属性中指定头文件的名称(对于 WPP 跟踪)。 在 属性页上的文件选项 下,指定 扫描配置文件。 有关详细信息,请参阅 WPP 预处理器

配置块语法

USEPREFIX (Function_Name,“格式字符串”);
定义在记录事件时要使用的格式字符串前缀。 第一个参数是应用此前缀的函数的名称。 第二个参数是要使用的格式字符串。 若要使用默认值,请指定 %!STDPREFIX!. 默认跟踪消息前缀指定 CPU 编号、进程 ID、线程 ID、协调世界时(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)