我可以在C#控制檯應用程序中成功地使用EventSource生成ETW事件;但是,如果我將事件存儲在ETL文件中並使用Windows性能分析器,那麼與有效負載值,事件名稱和提供程序名稱show相對應的列都是空的。EventSource事件在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開始MySession的
- 運行C#控制檯應用程序
- logman停止MySession的
- 打開與WPA的ETL,你會看到對應於該代碼的三個事件的三排,但行是空
- 開放與PerfView ETL時,你將看到的原始數據存在從
您使用哪個WPA版本?嘗試從Win10 SDK中的WPA:https://dev.windows.com/en-us/downloads/windows-10-sdk – magicandre1981
@ maciandre1981我使用的是最新的Windows 10 SDK的WPA,我的WPA版本是10.0.10586。我相信問題不是WPA,而是ETW事件產生的方式。 – rcxr
System.Diagnostics.Tracing顯示您使用收件箱版本。嘗試Nuget版本:https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource – magicandre1981