如何使用ETW编写自定义堆栈跟踪



Windows(ETW)的事件跟踪具有用于使用事件流捕获堆栈跟踪的设施。我假设它们是使用Event_header_ext_type_stack_trace32(OR 64)标题对它们进行/编码的。但是,事件标题是事件源的POV无法控制的。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363760(v=vs.85)9.aspx

在我的.NET应用程序中,我通过观察它在另一个线程(UI线程)中诊断出一个特定条件。我可以收集堆栈跟踪,以暴露状态,数据片已经到位,但是我想将ETW及其工具链用于进一步分析。

[顺便说一句,是的,我正在寻找阻滞剂,但是尽管现有的基础架构非常适合诊断已知的单个阻滞剂,但在这种情况下,我需要获得概述,事件相关性不够。另外,收集的数据很容易淹没我需要收集的设备。至少在我的情况下,我的探测器更聪明。]

所以我正在寻找(按优先顺序)

  1. 一种替代我收集到的堆栈的方式标题
  2. 使用另一个属性作为堆叠式的属性,以及一种方法告诉工具(perfview或xperf)使用此工具
  3. 一种方法在没有ETW的情况下(但在.net中)编写ETW .ETL兼容文件,控制标头(我不需要实时功能)

指针任何人?

我选择了选项4:使用完全不同的格式至少可以摄入和分析。在这种情况下,一个.perfview.xml文件已写入并完成了工作,尽管分析功能并不像我想要的那么好。

对此使用隐藏的etw命令:
"隐藏" ETW堆栈跟踪功能 - 到处都是堆栈!

最新更新