3

我一直在尝试在 .net 4.5 中使用 ETW。我有一个使用 EventSource 编写消息的小型示例应用程序,但是,我很难理解如何创建自己的 ETW 控制器和使用者应用程序。

我使用 PerfView 启用并查看事件源是否正常工作,以及在同一程序集中添加 EventListner。现在我希望能够拥有自己的自定义“PerfView”来管理和查看实时跟踪。我只是不知道如何绑定到事件源。

4

3 回答 3

1

查看 PerfMonitor 和构建它的 TraceEvent 类。

PerfMonitor 是一个包装应用程序,它可以控制源并使用它们的输出,因此您可以看到事情是如何工作的,而 TraceEvent 可以完成大部分繁重的工作,因此您可以将其包含在您的项目中。

PerfMonitor 和 TraceEvent 带有完整的源代码,它们在 Ms-PL 下获得许可。

PerfMonitor 概述: http ://bcl.codeplex.com/wikipage?title=PerfMonitor

TraceEvent 概述: http ://bcl.codeplex.com/wikipage?title=TraceEvent

于 2012-09-01T19:19:22.780 回答
1

我建议使用Tx (LINQ to logs and traces) library

此外,还有专用的LINQpad 驱动程序可用,因此您可以对真实 ETW 会话的 ETL 文件编写历史查询或常规查询,并立即在 LINQpad 中查看结果,甚至无需编写真实代码。

于 2015-02-27T01:45:28.043 回答
0

在 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 库程序员指南中提供了更多信息。

于 2020-11-24T14:09:06.287 回答