快速入门:处理第一个跟踪记录

尝试使用 TraceProcessor 来访问 Windows 事件跟踪(ETW)记录中的数据。 TraceProcessor 允许以 .NET 对象身份访问 ETW 跟踪数据。

在本快速入门中,您将学习如何:

  1. 安装 TraceProcessing NuGet 包。
  2. 创建 TraceProcessor。
  3. 使用 TraceProcessor 访问跟踪中包含的进程命令行。

先决条件

Visual Studio 2019

安装 TraceProcessing NuGet 包

.NET TraceProcessing 可以通过以下包 ID 从 NuGet 获取:

Microsoft.Windows.EventTracing.Processing.All

可以在控制台应用中使用此包列出 ETW 跟踪(.etl 文件)中包含的进程命令行。

  1. 创建新的 .NET 控制台应用。 在 Visual Studio 中,选择“文件”、“新建”、“项目...”,然后选择 C# 的控制台应用模板。

    输入项目名称,例如 TraceProcessorQuickstart,然后选择“创建”。

  2. 在解决方案资源管理器中,右键单击“依赖项”并选择“管理 NuGet 包...”并切换到“浏览”选项卡。

  3. 在“搜索”框中,输入 Microsoft.Windows.EventTracing.Processing.All 和搜索。

    选择“在具有该名称的 NuGet 包上安装”,然后关闭“NuGet”窗口。

创建 TraceProcessor

  1. 将Program.cs更改为以下内容:

    using Microsoft.Windows.EventTracing;
    using Microsoft.Windows.EventTracing.Processes;
    using System;
    
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.Error.WriteLine("Usage: <trace.etl>");
                return;
            }
    
            using (ITraceProcessor trace = TraceProcessor.Create(args[0]))
            {
                // TODO: call trace.Use...
    
                trace.Process();
    
                Console.WriteLine("TODO: Access data from the trace");
            }
        }
    }
    
  2. 提供运行项目时要使用的跟踪名称。

    在解决方案资源管理器中,右键单击项目并选择“属性”。 切换到“调试”选项卡,并在应用程序参数中输入跟踪(.etl 文件)的路径。

    如果还没有跟踪文件,可以使用 Windows 性能记录器 创建一个。

  3. 运行该应用程序。

    选择“调试”,然后选择“启动但不调试”以运行代码。

使用 TraceProcessor 访问跟踪中包含的进程命令行

  1. 将Program.cs更改为以下内容:

    using Microsoft.Windows.EventTracing;
    using Microsoft.Windows.EventTracing.Processes;
    using System;
    
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.Error.WriteLine("Usage: <trace.etl>");
                return;
            }
    
            using (ITraceProcessor trace = TraceProcessor.Create(args[0]))
            {
                IPendingResult<IProcessDataSource> pendingProcessData = trace.UseProcesses();
    
                trace.Process();
    
                IProcessDataSource processData = pendingProcessData.Result;
    
                foreach (IProcess process in processData.Processes)
                {
                    Console.WriteLine(process.CommandLine);
                }
            }
        }
    }
    
  2. 再次运行应用程序。

    这一次,您应该会看到在记录跟踪时,所有进程正在执行的命令行列表。

后续步骤

在本快速入门指南中,您创建了一个控制台应用程序,安装了 TraceProcessor,并使用它从 ETW 跟踪中访问了进程命令行。 现在,你有一个访问跟踪数据的应用程序。

进程信息只是存储在应用程序可以访问的 ETW 跟踪中的多种数据之一。

下一步是 更详细地查看 TraceProcessor 及其可以访问的其他数据源。