Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Trace 如何从ETL文件中获取文件版本信息_Trace_Etw_Etw Eventsource - Fatal编程技术网

Trace 如何从ETL文件中获取文件版本信息

Trace 如何从ETL文件中获取文件版本信息,trace,etw,etw-eventsource,Trace,Etw,Etw Eventsource,使用,可以解析由或生成的ETL文件 我发现TracEvent中的事件ImageIDFileVersion显示文件版本,事件ImageGroup显示文件路径。现在,我需要将两个事件映射到一起,并需要一种方法来确保两个事件都指向ETL跟踪文件中的同一个文件。重要信息来自ImageGroup和ImageIDFileVersion事件,因此为事件指定方法: using (_source = new ETWTraceEventSource(dataFileName)) { var kernelP

使用,可以解析由或生成的ETL文件


我发现TracEvent中的事件ImageIDFileVersion显示文件版本,事件ImageGroup显示文件路径。现在,我需要将两个事件映射到一起,并需要一种方法来确保两个事件都指向ETL跟踪文件中的同一个文件。

重要信息来自
ImageGroup
ImageIDFileVersion
事件,因此为事件指定方法:

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();   
}
在此之后,第二个事件
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文件中解析了文件版本。重要的一点是,时间戳被用作查找正确数据的相关器。这花了我一段时间,在的帮助下,我发现时间戳被用作相关器,以及如何找到文件版本