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

时间:2017-02-19 13:06:00

标签: .net stack etw

Windows事件跟踪(ETW)具有使用事件流捕获堆栈跟踪的功能。我假设它们是使用EVENT_HEADER_EXT_TYPE_STACK_TRACE32(或64)标头获取/编码的。但是,事件标题无法从事件源的POV控制。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363760%28v=vs.85%29.aspx

在我的.net应用程序中,我有一个特定的条件,我通过观察它在另一个线程(UI线程)中进行诊断。我可以收集暴露条件的堆栈跟踪,数据部分到位,但我想使用ETW及其工具链进行进一步分析。

[顺便说一句,是的,我正在寻找阻滞剂,但是现有的基础设施非常适合诊断已知的个体阻滞剂,我需要得到一个概述,事件相关性在这种情况下是不够的。此外,收集的数据很容易超过我需要收集的设备。至少就我的情况而言,我的探测器更加智能。]

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

  1. 一种替换我收集的堆栈到事件的方法 头
  2. 使用stacktrace的另一个属性,以及一种方法 告诉工具(perfview或xperf)使用这个
  3. 一种方式 写ETW .etl兼容的文件没有ETW(但在.net),完整 控制标题(我不需要实时功能)
  4. 指点任何人?

2 个答案:

答案 0 :(得分:0)

我选择了选项4:使用完全不同的格式,至少有一个工具可以摄取和分析。在这种情况下,.perfView.xml文件已经编写并完成了工作,尽管分析功能并不像我希望的那样好。

答案 1 :(得分:-1)