1

在尝试让 ETW 活动跟踪在我的项目中工作了很长一段时间但没有取得多大成功之后,我想我应该退后一步,看看这个页面上提供的 Microsoft 演示项目是否对我有用。不幸的是,两者都不是。问题是,这些事件确实显示在 VS 的诊断事件窗口中,但它们有一个普通的 GUID 作为 ActivityID 而不是分层活动 ID,并且 RelatedActivityID 只包含一个空值:

在此处输入图像描述

尝试了几个小时后,我发现有一种方法可以让它工作:当我在生成事件的同时使用PerfView收集数据时,它们突然得到了一个他们应该得到的分层 id,甚至有相关的活动标识集:

在此处输入图像描述

但是,一旦我停止使用 PerfViewer 收集事件,这些事件再次只有一个活动 ID 的 GUID,并且错过了相关的活动 ID。

有谁知道为什么会这样?这真的只有在外部应用程序正在监视事件时才有效,还是我能以某种方式让它只在 VS 中工作?是否有人可能知道这是否适用于 Azure 诊断?我想稍后使用 Azure 诊断来收听事件,但如果没有以这种方式生成分层 ID,它对我来说没有多大用处。

非常感谢!

4

1 回答 1

1

PerfView通过为 2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5 (System.Threading.Tasks.TplEventSource) 事件源设置关键字 0x80 (TasksFlowActivityIds) 来打开功能,如此处所述。

我不相信从 VS 的诊断事件中为该事件源设置此关键字是可能的。

于 2018-02-26T11:49:40.453 回答