捕获和查看 TraceLogging 数据

可以使用最新内部版本的 Windows Performance Tools (WPT) 捕获和查看 TraceLoggging 数据。 在发布检测之前,应测试 TraceLogging 提供程序代码,以确保在适当的时间生成事件数据并生成有意义的数据。

验证检测是否正确的过程涉及以下两个步骤:

  • 使用 Windows Performance Recorder (wpr.exe 或 wprui.exe) 捕获跟踪。
  • 使用 Windows 性能分析器 (wpa.exe) 查看跟踪。

注意对于Windows Phone,还可以使用 Tracelog.exe 和 Xperf.exe 来捕获跟踪。 请参阅下面的“使用 Tracelog 和 XPerf) 在电话 (上捕获跟踪”。

先决条件

WPR 和 WPA 工具必须与所链接的 TraceLogging 版本兼容。 如果无法捕获或解码事件,可能是因为工具不匹配且不兼容。

使用 WPR 捕获跟踪数据

  1. 为 TraceLoggingProvider 创建或编辑 (.wprp) 的 WPR 配置文件。

    可以使用以下示例。 将内容保存到文件扩展名为 .wprp 的文件中。 将 TODO 部分替换为提供程序的相应值。 例如,如果通过 GUID 注册了提供程序,请在此文件中指定 GUID。

    注意 对于内核模式提供程序,请将 NonPagedMemory=“true” 添加到 EventProvider Id 元素,请参阅以下 XML 示例中的注释。

示例 WPRP 文件:

<?xml version="1.0" encoding="utf-8"?>
<!-- TODO: 
1. Find and replace "WorkshopTraceLoggingProvider" with your component name.
2. See TODO below to update GUID for your event provider
-->
<WindowsPerformanceRecorder Version="1.0" Author="Microsoft Corporation" 
    Copyright="Microsoft Corporation" Company="Microsoft Corporation">
  <Profiles>
    <EventCollector Id="EventCollector_WorkshopTraceLoggingProvider" 
      Name="WorkshopTraceLoggingProviderCollector">
      <BufferSize Value="64" />
      <Buffers Value="4" />
    </EventCollector>

<!-- TODO: 
 1. Update Name attribute in EventProvider xml element with your provider GUID, 
    or if you specify an EventSource C# provider or call TraceLoggingRegister(...) 
    without a GUID, use star(*) before your provider name, 
    eg: Name="*MyEventSourceProvider" which will enable your provider appropriately.
 2. This sample lists more than 1 EventProvider xml element and references them again 
    in a Profile with EventProviderId xml element. For your component wprp, enable 
    the required number of providers and fix the Profile xml element appropriately
--> 
    <EventProvider Id="EventProvider_WorkshopTraceLoggingProvider" 
      Name="f9bc6c5d-4b98-43b5-90a1-1d0c8f45bf5a" />
<!-- For Kernel Mode providers, add NonPagedMemory="true" attribute to the 
  EventProvider Id element:

  Example:
  <EventProvider Id="EventProvider_UMDFReflector" 
    Name="263dd596-513b-4fd9-969c-022b691bb130" NonPagedMemory="true"/> 

-->

    <Profile Id="WorkshopTraceLoggingProvider.Verbose.File" 
      Name="WorkshopTraceLoggingProvider" Description="WorkshopTraceLoggingProvider" 
      LoggingMode="File" DetailLevel="Verbose">
      <Collectors>
        <EventCollectorId Value="EventCollector_WorkshopTraceLoggingProvider">
          <EventProviders>
<!-- TODO:
 1. Fix your EventProviderId with Value same as the Id attribute on EventProvider 
    xml element above
-->
            <EventProviderId Value="EventProvider_WorkshopTraceLoggingProvider" />
          </EventProviders>
        </EventCollectorId>
      </Collectors>
    </Profile>

    <Profile Id="WorkshopTraceLoggingProvider.Light.File" 
      Name="WorkshopTraceLoggingProvider" 
      Description="WorkshopTraceLoggingProvider" 
      Base="WorkshopTraceLoggingProvider.Verbose.File" 
      LoggingMode="File" 
      DetailLevel="Light" />

    <Profile Id="WorkshopTraceLoggingProvider.Verbose.Memory" 
      Name="WorkshopTraceLoggingProvider" 
      Description="WorkshopTraceLoggingProvider" 
      Base="WorkshopTraceLoggingProvider.Verbose.File" 
      LoggingMode="Memory" 
      DetailLevel="Verbose" />

    <Profile Id="WorkshopTraceLoggingProvider.Light.Memory" 
      Name="WorkshopTraceLoggingProvider" 
      Description="WorkshopTraceLoggingProvider" 
      Base="WorkshopTraceLoggingProvider.Verbose.File" 
      LoggingMode="Memory" 
      DetailLevel="Light" />

  </Profiles>
</WindowsPerformanceRecorder>
  1. 对于内核模式提供程序,需要将 NonPagedMemory=“true” 属性添加到 EventProvider Id 元素。

    <EventProvider Id="EventProvider_myTraceLoggingProviderKM" 
      Name="263dd596-513b-4fd9-969c-022b691bb130" NonPagedMemory="true"/>
    
  2. 使用文件扩展名 ( 保存文件。WPRP) 。

  3. 从命令提示符窗口中使用 WPR 启动捕获。

    <path to wpr>\wpr.exe -start GeneralProfile -start  yourTraceLoggingProvider.wprp
    

    GeneralProfile 将捕获系统事件。 对于常规调试,最好捕获系统事件以及提供程序中的事件。

  4. 运行测试方案 (加载和卸载驱动程序或组件以触发) 事件。

  5. 停止跟踪捕获并合并所有记录。

    <path to wpr>\wpr.exe -stop GeneralProfile -stop  yourTraceCaptureFile.etl description
    

还可以使用 Windows Performance Recorder 用户界面 (Wprui.exe) 来收集跟踪数据。

<path to wpr>\wprui.exe
  1. 在 WPR 窗口中,如果选项处于隐藏状态,请单击“ 更多选项”。
  2. 单击“ 添加配置文件” 并浏览到 .wprp 文件的位置。
  3. 选择 .wprp 文件,然后单击“ 打开”。 WPR 将验证配置文件的 XML 架构。
  4. 单击“ 开始 ”并运行测试方案。
  5. 单击“ 保存 ”以合并结果并将其保存到文件中。 如果使用 WPR 用户界面,还可以选择在 WPA 中打开 .etl 日志文件。

使用 Tracelog 和 XPerf) 在电话 (上捕获跟踪

  1. 开始对提供程序进行跟踪捕获。

    cmdd tracelog '-start test -f c:\test.etl -guid #providerguid'
    
  2. 运行测试方案以记录事件。

  3. 停止跟踪捕获。

    cmdd tracelog '-stop test'
    
  4. 合并跟踪结果。

    cmdd xperf -merge c:\test.etl c:\testmerged.etl
    
  5. 检索合并的日志文件。

    getd c:\testmerged.etl
    

使用 WPA 查看 TraceLogging 数据

目前,WPA 是唯一可用于查看 TraceLogging 生成的 etl 文件的查看器。

  1. 启动 WPA。

    <path to wpr>\wpa.exe
    
  2. 加载跟踪文件 (.etl) 。

  3. 查看提供程序事件。 在 Graph 资源管理器中,展开 “系统活动”。

  4. 双击“ 一般事件 ”,在“分析”视图中查看它们。

  5. 在“分析”视图中,找到提供程序中的事件,验证日志记录是否正常工作。

    在“泛型事件”表的“ 提供程序名称 ”列中,找到并选择具有提供程序名称的行。

    可以单击列标题以按列名称排序,这可能会使查找提供程序更加容易。 找到提供程序时,右键单击名称并选择 “筛选到所选内容”。