C++事件跟踪Windows(ETW)包装器

6
我一直在研究Event Tracing for Windows(ETW),以便在现有的后端/服务器应用程序中使用。MSDN和其他资源强调了该框架的强大功能及其与xperf等工具的集成,这让我印象深刻。
然而,Win32 API和处理清单编码、编译/注册等方面的开销让我有些担心。
各位,你们: - 推荐它吗?在您的系统中是否遇到问题? - 知道更多C++/STL风格的包装器吗? - 有管理清单文件的工具吗?
2个回答

6

与其直接使用Win32 API,我建议使用WPP。

WPP是一个预处理器,允许您在代码的任何位置编写类似于printf的跟踪行,并将这些行的结果以及附加数据(例如传递给跟踪中各个%d和%s的参数)记录到ETW中。

此操作的明确指南是Visual C++ 2010项目中的WPP跟踪


谢谢你的回答Uri。我可以问一下为什么你推荐WPP吗?它避免了我所说的xml清单文件。我有点被你引用的文章中解释的许多组成部分所压倒。*.mof文件,*.tmh文件,tracepdb.exe。但我会去看看的,它似乎非常强大。可以使用xPerf来分析这些日志吗? - MW_dev
我没有使用过XPerf,但其他SA线程说你可以将其用于像WPP这样的经典提供程序。我已经自己实现了解决方案,它只需要在预构建事件中添加tracewpp预处理器,将TMH文件包含在您的代码中,在适当的位置调用跟踪宏,定义单个GUID并在主函数中调用init/cleanup。欢迎提出其他问题。 - Uri Cohen
@UriCohen,关于那篇文章,您如何使用WPP_CONTROL_GUIDS(我猜测)添加多个日志级别(错误、警告)? - Ghita
1
代码中可以有多个日志级别。但是,使用 WPP 时,您将写入“经典 ETW 提供程序”,这意味着您只能为其设置特定的日志级别和标志,并在运行时进行设置,从而仅具有单个跟踪会话。 - Uri Cohen

2
一方面,ETW非常强大。但同时,使用它并不容易。
然而,在GitHub上有一个项目简化了编写自己的ETW提供程序。这是一个很好的编写示例:
- ETW清单(.man)以披露事件字段 - WPR配置文件(.wprp)以向WPRUI(记录器)介绍您的分析器 - WPA配置文件(.wpaProfile)和感兴趣的区域(.xml)以向WPA介绍数据的表示方法。
请查看Intel single event API (SEAPI) wiki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接