0

目前,我可以使用以下代码使用 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();
4

1 回答 1

1

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

参考:

如何在运行时列出函数的所有调用?

更新:</p>

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

于 2017-08-08T06:26:16.217 回答