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

15

我想使用 EventSource 触发 ETW 事件,并使用 Windows Performance Analyzer 查看它们。

我有一个基本的 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)的通用事件图表中看不到我的提供者或事件。

谢谢您的时间:)


你是如何启动你的会话的?这是我们一直在使用的方法 - http://svcperf.codeplex.com/wikipage?title=Realtime%2bWCF%2bSession&referringTitle=FAQs - Sajay
2个回答

2
WPR不知道你的自定义EventSource,所以你需要创建一个记录配置文件来启用它。WPT附带了一些示例配置文件,可以帮助你入门。
WPR 8.1版本支持与PerfView相同的命名约定,这意味着你可以在配置文件中使用*YourEventSource代替GUID。
根据我的经验,在WPA 8.1版本中,某些EventSource功能的支持并不好。例如,如果你使用任务,它们将无法正确显示。然而,当你为你的EventSource创建一个记录配置文件时,EventSource的基本用法在WPA/WPR 8.1版本中表现良好。
另一个选项是使用PerfView收集跟踪数据,并使用WPA进行分析(如果你更喜欢使用WPA)。

我已经创建了一个配置文件,并使用WPR记录事件。当我在PerfView中打开.etl文件时,事情看起来和我预期的一样。但是,当我在WPA中打开.etl文件时,我看到了一个GUID代替我的事件源名称,并且数字代替了我的事件名称。这是否是预期的行为? - JonDrnek

1
WPR和WPA以前不支持EventSource,但是新的8.1 ADK可以。请参见此处

Vance发布了一个定制版的PerfView(http://sdrv.ms/QnHpd4),可以收集EventSource事件,然后在WPA中查看。我怀疑最近发布的1.5版本的PerfView也支持这一点。http://blogs.msdn.com/b/vancem/archive/2013/12/09/perfview-version-1-5-has-been-released.aspx - Keith Hill

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