在尝试让 ETW 活动跟踪在我的项目中工作了很长一段时间但没有取得多大成功之后,我想我应该退后一步,看看这个页面上提供的 Microsoft 演示项目是否对我有用。不幸的是,两者都不是。问题是,这些事件确实显示在 VS 的诊断事件窗口中,但它们有一个普通的 GUID 作为 ActivityID 而不是分层活动 ID,并且 RelatedActivityID 只包含一个空值:
尝试了几个小时后,我发现有一种方法可以让它工作:当我在生成事件的同时使用PerfView收集数据时,它们突然得到了一个他们应该得到的分层 id,甚至有相关的活动标识集:
但是,一旦我停止使用 PerfViewer 收集事件,这些事件再次只有一个活动 ID 的 GUID,并且错过了相关的活动 ID。
有谁知道为什么会这样?这真的只有在外部应用程序正在监视事件时才有效,还是我能以某种方式让它只在 VS 中工作?是否有人可能知道这是否适用于 Azure 诊断?我想稍后使用 Azure 诊断来收听事件,但如果没有以这种方式生成分层 ID,它对我来说没有多大用处。
非常感谢!