快速入门:处理你的第一个跟踪
尝试使用 TraceProcessor 访问 Windows 事件跟踪 (ETW) 跟踪中的数据。 利用 TraceProcessor 可以将 ETW 跟踪数据作为 .NET 对象访问。
本快速入门介绍如何执行以下操作:
- 安装 TraceProcessing NuGet 包。
- 创建 TraceProcessor。
- 使用 TraceProcessor 访问跟踪中包含的进程命令行。
先决条件
Visual Studio 2019
安装 TraceProcessing NuGet 包
可使用以下包 ID ,从 NuGet 获得 .NET TraceProcessing:
Microsoft.Windows.EventTracing.Processing.All
可以在控制台应用中使用此包列出 ETW 跟踪(.etl 文件)中包含的进程命令行。
创建新的 .NET 控制台应用。 在 Visual Studio 中,选择“文件”、“新建”、“项目...”,然后选择 C# 的控制台应用模板。
在“项目名称”处输入名称(例如 TraceProcessorQuickstart),然后选择“创建”。
在解决方案资源管理器中,右键单击“依赖项”,然后选择“管理 NuGet 包…”并切换到“浏览”选项卡。
在搜索框中,输入“Microsoft.Windows.EventTracing.Processing.All”并搜索。
在具有该名称的 NuGet 包上选择“安装”,然后关闭 NuGet 窗口。
创建 TraceProcessor
将 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"); } } }
提供在运行项目时使用的跟踪名称。
在解决方案资源管理器中,右键单击该项目,然后选择“属性”。 切换到“调试”选项卡,在“应用程序”参数中输入跟踪(.etl 文件)路径。
如果还没有跟踪文件,可以使用 Windows Performance Recorder 创建一个。
运行该应用程序。
选择“调试”,然后选择“开始执行(不调试)”以运行代码。
使用 TraceProcessor 访问跟踪中包含的进程命令行
将 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); } } } }
再次运行应用程序。
这一次,应会看到记录跟踪时正在执行的所有进程的命令行列表。
后续步骤
在本快速入门中,你创建了一个控制台应用程序,并安装了 TraceProcessor,将其用于从 ETW 跟踪访问进程命令行。 现在,你有一个可访问跟踪数据的应用程序。
进程信息只是存储在你的应用程序可以访问的 ETW 跟踪中的多种数据之一。
接下来是进一步了解 TraceProcessor 及其它可以访问的其他数据源。