快速入门:处理你的第一个跟踪

尝试使用 TraceProcessor 访问 Windows 事件跟踪 (ETW) 跟踪中的数据。 利用 TraceProcessor 可以将 ETW 跟踪数据作为 .NET 对象访问。

本快速入门介绍如何执行以下操作:

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

先决条件

Visual Studio 2019

安装 TraceProcessing NuGet 包

可使用以下包 ID ,从 NuGet 获得 .NET TraceProcessing:

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 Performance Recorder 创建一个。

  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 及其它可以访问的其他数据源。