Windows性能分析器中的EventSource事件显示为空

时间:2016-02-03 12:49:58

标签: c# etw etw-eventsource eventsource

我可以在C#控制台应用中使用EventSource成功生成ETW事件;但是,如果我将事件存储在ETL文件中并使用Windows性能分析器,则与有效负载值,事件名称和提供者名称对应的列为空。

问题

是否有任何额外的EventSource配置允许WPA中的列被填充?

备注:

  • 此处还有另一个问题:“你如何使用Windows性能分析器查看由EventSource创建的ETW事件?”,我相信这个问题不是我的重复,因为我可以看到代表WPA事件的行,只是事件是空的。
  • 如果我使用PerView.exe分析ETL,我可以看到该事件的原始数据存在
  • 如果我使用我手边的库从C ++创建事件,则生成的ETW事件在WPA中正确显示
  • 在WPA中拥有空列不是一个大问题,我真正的问题是用C ++编写的第二个应用程序期望事件具有有效负载和事件名称无法识别事件。我相信WPA中的空列和C ++应用程序无法识别事件是两个相关的症状,并且鉴于WPA具有空列是任何人都可以通过简单地运行我在下面描述的步骤来重现的,这就是我提到的原因这个问题是我提出问题时的主要症状。

最小代码:

using System.Diagnostics.Tracing;
namespace EtwConsoleApp {
    class Program {
        static void Main(string[] args) {
            MyEventSource.Instance.MyEvent("x");
            MyEventSource.Instance.MyEvent("y");
            MyEventSource.Instance.MyEvent("z");
        }
    }

    [EventSource(Guid = "56ff7ff6-0418-4501-945f-c12737bc1c70")]
    sealed class MyEventSource : EventSource {
        [Event(1, Level = EventLevel.Verbose, Opcode = EventOpcode.Info)]
        public void MyEvent(string value) {
            this.WriteEvent(1, value);
        }

        public static MyEventSource Instance = new MyEventSource();
    }
}

查看WPA中的空行:

  • 打开提升的CMD
  • logman创建跟踪MySession -p {56ff7ff6-0418-4501-945f-c12737bc1c70} -o MySession.etl
  • logman start MySession
  • 运行C#控制台应用程序
  • logman stop MySession
  • 使用WPA打开ETL,您将看到与代码中的三个事件对应的三行,但行是空的
  • 使用PerfView打开ETL,您将看到原始数据存在(您可以通过在选择事件时按ALT + D将事件转储到PerfView中的控制台)

2 个答案:

答案 0 :(得分:0)

.NET 4.5中的System.Diagnostics.Tracing.EventSource不会生成WPA可以正确显示的事件。

解决方案是使用: Microsoft.Diagnostics.Tracing.EventSource

另一个解决方案是使用: .NET 4.6中的System.Diagnostics.Tracing.EventSource(在我的情况下是不可能的)

答案 1 :(得分:0)

System.Diagnostics.Tracing表示您使用.net framework 4.5的收件箱版本。试试Nuget版本Microsoft.Diagnostics.Tracing.EventSource,它会更频繁地更新以获得新功能。