如何在静态库中使用 WPP?
WPP 跟踪可以在静态库中使用,以便单独控制静态库 (.lib) 和二进制 (.exe、.dll 或使用它的 .sys) 之间的跟踪。
二进制文件和库都有自己的控制 GUID。 这允许在静态库和/或二进制文件中启用跟踪。
可以在多个点使用 WPP 访问 .lib 文件,如以下代码示例所示。 请注意,定义控件 GUID 的实际值并不重要,因为静态库不会调用 WPP_INIT_TRACING 宏,后者在 ETW 中执行实际注册。
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(mylib,(0,0,0,0,0), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
)
使用库的 .dll、.exe 和 .sys 文件必须调用 WPP_INIT_TRACING,这将向 WPP 注册提供程序。 调用宏WPP_INIT_TRACING的二进制文件必须具有WPP_CONTROL_GUID宏获取的 WPP 控件 GUID 的副本。 仅当计划在二进制文件中也使用静态库中定义的标志时,才需要标志值的副本。
在以下代码示例中,首先声明静态库的控件 GUID,并且控件 GUID 的标志与库中定义的标志匹配:
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(SharedStaticLibs,(81b20feb,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
) \
WPP_DEFINE_CONTROL_GUID(AppSpecificFlags,(81b20fec,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(EntryExit) \
WPP_DEFINE_BIT(Initialization) \
WPP_DEFINE_BIT(MemoryAllocations) \
)
可以通过为 .lib 和 .exe 文件指定单独的控件 GUID(每个具有自己的标志)或两者一个控件 GUID,来选择在组件和静态库上跟踪所需的控制程度。 在示例中,.exe 文件使用的标志与 .lib 文件相同。