4

我为 CLR 提供程序记录 ETW 事件:

xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4 -f clr.etl
...
xperf -stop clr

然后在 wpa.exe 中打开 clr.etl 并查看大量“通用事件”。但似乎 wpa 不显示一些数据,这在MSDN中有描述

我所看到的都与此类似:

Process    Unknown
Id    1
Opcode Name
Task Name
Provider Name    e13c0d23-ccbc-4e12-931b-d9cc2eee27e4
Time    0,071731589s
Selection Duration    0,416407863s
Start Time    0,002151869s
End Time    0,418559732s
Data Points    1
Table Data    Point    Selection
Cpu    0    
ThreadId    50 440    
Sum of Count    1    23
Time (s)    0,071846769    

Loo like this is GCStart_V1event,但我找不到例如字段Reason

是否可以在 wpa 中查看通用事件数据?

WPA 版本 - 10.0.10586.212

4

2 回答 2

5

附注:我通常使用至少这两个内核标志记录跟踪:

xperf -on PROC_THREAD+LOADER -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4
xperf -stop -stop clr -d clr.etl

否则,进程名称可能无法在 WPA 中解析。

回到您的问题,在 WPA 中如何呈现自定义字段有点奇怪,但是在您克服了最初的痛苦之后,您会发现它的编辑器非常有用。您提到的字段是特定于给定事件的自定义字段之一。默认情况下,这些字段不显示,您需要在高级视图窗口中添加它们:

将字段添加到视图

我拖了列Field1之前的Thread Name。然后你需要选择一个事件(不是它的父事件,而是事件所在的行),你会注意到字段的列名相应地改变了:

原因场

此外,该Message字段通常包含所有字段(它们的名称和值),例如在这种情况下:Reason=1; Count=2; ClrInstanceID=36

于 2017-01-06T14:51:19.613 回答
5

由于 .NET 修补程序等原因,CLR ETW 提供程序注册经常出现在“普通”机器上。在这种情况下,您需要使用(64 位)重新/注册它

wevtutil um %windir%\Microsoft.NET\Framework64\v4.0.30319\CLR-ETW.man
wevtutil im %windir%\Microsoft.NET\Framework64\v4.0.30319\CLR-ETW.man

如果您的问题是您的视图未配置为查看 Field1 .. N 个自定义事件,那么 lowleveldesign 的答案是正确的。

于 2017-01-06T17:09:04.560 回答