0

Microsoft TraceEvent ライブラリを使用すると、 xperf、WPR、またはPerfViewによって生成された ETL ファイルを解析できます。

TracEvent の Event ImageIDFileVersion はファイル バージョンを示し、Event ImageGroup はファイルのファイル パスを示していることがわかりました。ここで、両方のイベントを一緒にマップする必要があり、両方のイベントが ETL トレース ファイル内の同じファイルを指していることを確認する方法が必要です。

4

1 に答える 1

2

重要な情報は および イベントから取得ImageGroupImageIDFileVersionれるため、メソッドをイベントに割り当てます。

using (_source = new ETWTraceEventSource(dataFileName))
{
     var kernelParser = new KernelTraceEventParser(_source);

     _source.Kernel.ImageGroup += KernelOnImageGroup;

     var symbolParser = new SymbolTraceEventParser(_source);      

     symbolParser.ImageIDFileVersion += SymbolParserOnImageIdFileVersion;

     // go into a loop processing events can calling the callbacks.  This will return when the all the events
     // In the file are processed, or the StopProcessing() call is made.
     _source.Process();
}

基本的に、FileVersionTraceData イベントは、対応する Image* イベントの前に発生し、同じタイムスタンプを持ちます。そのため、タイムスタンプが相関子として使用されます。

イベントが発生したらImageIDFileVersion、現在のデータを別の FileVersionTraceData オブジェクトに複製して、後で使用できるように保存する必要があります。

void SymbolParserOnImageIdFileVersion(FileVersionTraceData data)
{
     lastFileVersionData = (FileVersionTraceData)data.Clone();   
}

この後、2 番目のイベントImageGroupが発生します。TimeStampRelativeMSecここで、タイムスタンプ ( ) を保存されたデータと比較する必要があります。タイムスタンプが一致する場合、両方のイベントが同じファイルを指しています。

void KernelOnImageGroup(ImageLoadTraceData imageLoadTraceData)
{
     var fileName = imageLoadTraceData.FileName;
     {
          if (!string.IsNullOrEmpty(fileName))
          {
                if (lastFileVersionData != null && lastFileVersionData.TimeStampRelativeMSec == imageLoadTraceData.TimeStampRelativeMSec)
                {
                     var fileVersion = lastFileVersionData.FileVersion;
                     var origFileName = lastFileVersionData.OrigFileName;
                     Console.WriteLine("found File {0} with File Version {1}", origFileName, fileVersion);
                }
          }
      }
 }

これで、ETL ファイルからファイル バージョンが解析されました。重要な点は、正しいデータを見つけるための相関子としてタイムスタンプが使用されることです。これにはしばらく時間がかかり、Vance Morrisonの助けを借りて、Timestamp が相関子として使用されていることと、ファイルのバージョンを見つける方法を見つけました。

于 2014-07-11T14:48:23.463 に答える