【问题标题】:C++ Event Tracing for Windows (ETW) wrapper [closed]适用于 Windows 的 C++ 事件跟踪(ETW)包装器 [关闭]
【发布时间】:2011-09-18 01:23:13
【问题描述】:

我一直在研究 Event Tracing for Windows (ETW) 以在现有后端/服务器应用程序中使用。 MSDN 和其他来源已经出售了框架的强大功能以及它与xperf 等的集成,坦率地说,我对此印象深刻。

但是我有点担心 Win32 API 和使用清单编码编译/注册等的开销。

各位,你呢:

  • 推荐它?在您的系统中使用它时遇到问题?
  • 知道更多 C++/STL 风格的包装器吗?
  • 是否有用于管理清单文件的工具?

【问题讨论】:

    标签: c++ windows events trace etw


    【解决方案1】:

    我建议使用 WPP,而不是直接使用 Win32 API。

    WPP 是一个预处理器,它允许您在代码的任何位置编写类似 printf 的跟踪行,并获得这些跟踪行的结果以及其他数据(例如,传递给trace) 被记录到 ETW。

    这方面的明确指南是WPP Tracing in Visual C++ 2010 Projects

    【讨论】:

    • 感谢您的回答 Uri。我能问一下你为什么推荐WPP吗?它避免了我谈到的 xml 清单文件。您参考的文章中解释的移动部件的数量让我有点不知所措。 *.mof 文件、*.tmh 文件、tracepdb.exe。但是我会检查一下,它似乎很强大。可以使用 xPerf 分析这些日志吗?
    • 我没有使用过 XPerf,但其他 SA 线程说您将它用于 WPP 等经典提供商。我自己实现了该解决方案,它只是归结为添加一个 tracewpp 预处理器作为预构建事件,包括代码中的 TMH 文件,在适当的情况下调用跟踪宏,定义单个 GUID 并调用 init/cleanup主要的。欢迎提出其他问题。
    • @UriCohen 与那篇文章相关,如何使用 WPP_CONTROL_GUIDS(我猜)添加多个日志记录级别(错误、警告)?
    • 代码中可以有多个日志级别。但是,使用 WPP,您可以写入“经典 ETW 提供程序”,这意味着您只能为其拥有一个跟踪会话,并在运行时设置特定的日志级别和标志。
    【解决方案2】:

    一方面,ETW 非常强大。但同时,也不是那么容易入手的。

    但是,GitHub 上有一个项目可以简化您编写自己的 ETW 提供程序。这是一个很好的写作例子:

    • ETW 清单 (.man) 公开事件字段
    • WPR 配置文件 (.wprp) 向 WPRUI(记录器)介绍您的分析器
    • WPA 配置文件 (.wpaProfile) 和感兴趣区域 (.xml) 用于向 WPA 教授您的数据表示。

    请看Intel single event API (SEAPI) wiki

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2022-08-09
      • 2019-06-03
      • 2020-05-23
      • 2013-08-31
      • 2015-01-17
      • 1970-01-01
      相关资源
      最近更新 更多