2016-02-03 19 views
-1

我可以在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時,你將看到的原始數據存在從
+0

您使用哪個WPA版本?嘗試從Win10 SDK中的WPA:https://dev.windows.com/en-us/downloads/windows-10-sdk – magicandre1981

+0

@ maciandre1981我使用的是最新的Windows 10 SDK的WPA,我的WPA版本是10.0.10586。我相信問題不是WPA,而是ETW事件產生的方式。 – rcxr

+0

System.Diagnostics.Tracing顯示您使用收件箱版本。嘗試Nuget版本:https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource – magicandre1981

回答

0

System.Diagnostics.Tracing.EventSource(你可以通過按下ALT + d當選擇事件轉儲的事件在PerfView控制檯) .NET 4.5不會生成WPA可正確顯示的事件。

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

另一種解決方案是使用:從.NET 4 System.Diagnostics.Tracing.EventSource。6(在我的情況下是不可能的)

+1

張貼來自他人的解決方案不是最好的主意;) – magicandre1981

+0

你的問題是什麼?我爲將來需要它的人提供瞭解決方案,我不想要任何好處或者類似的東西,我只想幫忙。另外,考慮到通過對解決方案投票-1,僅僅因爲你「想」我試圖竊取答案,正在降低與解決方案本身的正確性無關的理由。未來會更客觀。 – rcxr

+0

您的正確方法是說,好的nuget版本幫助,發佈它作爲答案,並將其標記爲答案。在未來,我會忽略你,不再回答。 – magicandre1981

相關問題