我在WinDbg中获得了一个大型托管对象的地址,下一步是什么?

时间:2009-06-23 23:12:41

标签: memory-management windbg

我创建了一个高内存利用率转储并使用!dumpheap -stat和!dumpheap -mt我得到了两个30 MB大字符串通用列表的地址。

我想了解更多有关这些列表的信息。它们包含的内容或使用它们的代码。

有没有办法找到它们?

0:000> !做2b370038 名称:System.Object [] MethodTable:71e240bc EEClass:71c0da54 大小:33554448(0x2000010)字节 数组:等级1,元素数量8388608,类型CLASS 元素类型:System.Collections.Generic.List`1 [[System.String,mscorlib]] 领域: 无

2 个答案:

答案 0 :(得分:1)

要获取有关阵列实例的信息,可以使用带有!dumparray标志的-details命令。但是请注意,转储整个数组可能需要一段时间并输出大量文本。

要了解保持实例存活的内容,请使用!gcroot命令。您可能还想查看sosex.dll中的!refs命令。

sosex.dll也有一个!gcgen命令,它可以告诉你实例的生成。 IIRC已将相应的命令添加到sos.dll的CLR 4.0版本中。

答案 1 :(得分:0)

我建议您尝试使用.Net Memory Profiler(http://memprofiler.com)来探索托管内存转储。它比windbg容易得多。一个很好的GUI,您可以使用它来搜索和探索参考图。您还可以查看实例的“字段”值。