C# 我是否可以使用ClrMD仅遍历前地面中进程使用的对象?

C# 我是否可以使用ClrMD仅遍历前地面中进程使用的对象?,c#,visual-studio,debugging,diagnostics,clrmd,C#,Visual Studio,Debugging,Diagnostics,Clrmd,目前,我可以使用下面使用ClrMD的代码获取堆中存在的所有对象。 是否可以仅获取目标进程中使用的对象集(即仅获取目标进程源代码中的对象) 据我所知,VS配置文件工具具有在程序运行时收集函数的所有调用者(对象、函数)的功能。这是你想要的吗 参考: 更新: CLrMD确实有用于枚举PDB信息的类。我建议您尝试使用该类枚举堆栈帧的参数/局部变量。他们必须向DataTarget类添加代码才能这样做,因为它目前似乎不支持它。谢谢您的考虑,但我实际上想遍历clrstackframe并获取方法体和其中的变量

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


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

参考:

更新:


CLrMD确实有用于枚举PDB信息的类。我建议您尝试使用该类枚举堆栈帧的参数/局部变量。他们必须向DataTarget类添加代码才能这样做,因为它目前似乎不支持它。

谢谢您的考虑,但我实际上想遍历clrstackframe并获取方法体和其中的变量值。@GANESH GANI,“遍历clrstackframe”是什么意思?你是说你想用Microsoft.Diagnostics.Runtime获取一些东西吗?比如,我可以获取堆栈框架中存在的所有方法,但我无法访问这些方法中存在的局部变量。Hai,我相信我们在clrmd中使用的堆栈框架是ClrStackFrame类型,我确实想知道,我们可以将其用作System.Diagnostics.StackFrame,使用它我们可以访问lcal变量及其属性。@GANESH GANI,我编辑答案并提供信息。如果可能的话,你可以参考一下。
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();