我可以使用 ClrMD 只遍历前台进程使用的对象吗?

Can I use ClrMD to traverse only the objects that are used by the process in the fore ground?

目前我可以使用以下代码使用 ClrMD 获取堆中存在的所有对象。 是否可以仅获取目标进程中使用的对象集(即仅包含在目标进程的源代码中的对象)。

var types = heap.EnumerateObjectAddresses()
           .GroupBy(obj => heap.GetObjectType(obj).Name)
           .Select(group => new { Key = group.Key, Count = group.Count() })
           .OrderBy(type => type.Count);

foreach (var type in types)
Console.WriteLine("{0} {1}", type.Key, type.Count);
Console.ReadLine();

据我所知,VS profile 工具具有在程序运行时收集函数的所有调用者(对象、函数)的功能运行。是你想要的吗?

参考:

更新:

CLrMD 确实有 classes 用于枚举 PDB 信息。我建议您尝试使用 DataTarget class 来枚举堆栈帧的 parameters/locals。他们必须向 DataTarget class 添加代码才能这样做,因为它目前看起来不支持它。