我一直在尝试在 .net 4.5 中使用 ETW。我有一个使用 EventSource 编写消息的小型示例应用程序,但是,我很难理解如何创建自己的 ETW 控制器和使用者应用程序。
我使用 PerfView 启用并查看事件源是否正常工作,以及在同一程序集中添加 EventListner。现在我希望能够拥有自己的自定义“PerfView”来管理和查看实时跟踪。我只是不知道如何绑定到事件源。
我一直在尝试在 .net 4.5 中使用 ETW。我有一个使用 EventSource 编写消息的小型示例应用程序,但是,我很难理解如何创建自己的 ETW 控制器和使用者应用程序。
我使用 PerfView 启用并查看事件源是否正常工作,以及在同一程序集中添加 EventListner。现在我希望能够拥有自己的自定义“PerfView”来管理和查看实时跟踪。我只是不知道如何绑定到事件源。
查看 PerfMonitor 和构建它的 TraceEvent 类。
PerfMonitor 是一个包装应用程序,它可以控制源并使用它们的输出,因此您可以看到事情是如何工作的,而 TraceEvent 可以完成大部分繁重的工作,因此您可以将其包含在您的项目中。
PerfMonitor 和 TraceEvent 带有完整的源代码,它们在 Ms-PL 下获得许可。
PerfMonitor 概述: http ://bcl.codeplex.com/wikipage?title=PerfMonitor
TraceEvent 概述: http ://bcl.codeplex.com/wikipage?title=TraceEvent
我建议使用Tx (LINQ to logs and traces) library。
此外,还有专用的LINQpad 驱动程序可用,因此您可以对真实 ETW 会话的 ETL 文件编写历史查询或常规查询,并立即在 LINQpad 中查看结果,甚至无需编写真实代码。
在 2020 年,您可以使用它Microsoft.Diagnostics.Tracing.TraceEvent
来创建一个简单的侦听器。例子:
class Program
{
static void Main(string[] args)
{
var sessionName = Guid.NewGuid().ToString();
using (var session = new
Microsoft.Diagnostics.Tracing.Session.TraceEventSession(sessionName))
{
// press CTRL-C to quit
Console.CancelKeyPress += (sender, e) => session.Stop();
session.Source.Dynamic.All += data =>
{
var line = $"{data}\n";
Console.WriteLine(line);
};
var providerGuid = Microsoft.Diagnostics.Tracing.Session.TraceEventProviders.GetEventSourceGuidFromName
("MyCompany-MyApp-MyEventSource1");
session.EnableProvider(providerGuid);
session.Source.Process();
}
}
}
TraceEvent 库程序员指南中提供了更多信息。