如何使用Windows性能分析器查看EventSource创建的ETW事件?

本文关键字:创建 ETW 事件 EventSource Windows 何使用 性能 分析器 | 更新日期: 2023-09-27 17:54:19

我想使用EventSource触发ETW事件,并使用Windows性能分析器查看它们。

我有一个基本的EventSource:

[EventSource(Name = "BasicEventSource")]
public class ETWLogger : EventSource
{
#if DEBUG
    private const bool ThrowOnError = true;
#else
    private const bool ThrowOnError = false;
#endif
    private ETWLogger(bool throwOnError) : base(throwOnError) { }
    private static ETWLogger _log;
    public static ETWLogger Log
    { get { return _log ?? (_log = new ETWLogger(ThrowOnError)); } }
    private static class Keywords
    {
        public const EventKeywords Perf = (EventKeywords) 1;
    }
    [Event(1, Keywords = Keywords.Perf, Level = EventLevel.Informational)]
    public void Startup() { WriteEvent(1, "StartUp"); }
}

当我用Windows性能记录器(WPR)记录时,我在Windows性能分析器(WPA)的通用事件图中看不到我的提供者或事件。

谢谢你的时间:)

如何使用Windows性能分析器查看EventSource创建的ETW事件?

WPR不知道任何关于您的自定义EventSource,所以您必须创建一个记录配置文件,以便您可以启用它。WPT附带了几个样例配置文件,可以帮助您入门。

8.1版本的WPR支持与PerfView相同的命名约定,这意味着您可以在配置文件中使用*YourEventSource而不是GUID。

根据我的经验,在WPA的8.1版本中,EventSource的一些特性没有得到很好的支持。例如,如果你使用任务,它们将不会正确显示。但是,当您为EventSource创建记录配置文件时,EventSource的基本用法与8.1版本的WPA/WPR配合良好。

另一种选择是使用PerfView收集跟踪并使用WPA进行分析(如果您喜欢WPA而不是PerfView)。

WPR和WPA不支持EventSource,但支持新的8.1 ADK。看到这里。