如何使用 Windows 性能分析器查看 EventSource 创建的 ETW 事件?
Posted
技术标签:
【中文标题】如何使用 Windows 性能分析器查看 EventSource 创建的 ETW 事件?【英文标题】:How do you view ETW events created by EventSource using Windows Performance Analyzer? 【发布时间】:2013-01-02 21:57:28 【问题描述】:我想使用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) 的通用事件图中看不到我的提供程序或事件。
感谢您的宝贵时间 :)
【问题讨论】:
你是如何开始你的课程的?这是我们一直在使用的一种方法 - svcperf.codeplex.com/… 【参考方案1】:WPR 对您的自定义EventSource
一无所知,因此您必须创建一个录制配置文件才能启用它。 WPT 附带了一些示例配置文件,可以帮助您入门。
WPR 8.1 版本支持与 PerfView 相同的命名约定,这意味着您可以使用*YourEventSource
代替配置文件中的 GUID。
根据我的经验,某些EventSource
功能在 8.1 版本的 WPA 中没有得到很好的支持。例如。如果您使用任务,它们将无法正确显示。但是,当您为 EventSource
创建录制配置文件时,EventSource
的基本用法与 8.1 版本的 WPA/WPR 配合良好。
另一种选择是使用 PerfView 收集跟踪并使用 WPA 进行分析(如果您更喜欢 PerfView)。
【讨论】:
我创建了一个配置文件并正在使用 WPR 记录事件。当我在 PerfView 中打开 .etl 文件时,事情看起来与我预期的一样。但是,当我在 WPA 中打开 .etl 文件时,我看到的是指南而不是我的事件源名称和数字,而不是我的事件名称。这是预期的吗?【参考方案2】:WPR 和 WPA 不支持 EventSource,但支持新的 8.1 ADK。见here。
【讨论】:
Vance 在这里发布了一个自定义版本的 PerfView (sdrv.ms/QnHpd4),它可以收集 EventSource 事件,然后可以在 WPA 中查看这些事件。我怀疑最近发布的 1.5 版本的 PerfView 也支持这一点。 blogs.msdn.com/b/vancem/archive/2013/12/09/…以上是关于如何使用 Windows 性能分析器查看 EventSource 创建的 ETW 事件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 性能分析器中查看毫秒而不是 % 样本