【问题标题】:I got the address of a large managed object in WinDbg, what next?我在 WinDbg 中获得了一个大型托管对象的地址,接下来呢?
【发布时间】:2010-11-05 08:44:32
【问题描述】:

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

我想了解有关这些列表的更多信息。它们包含什么或哪段代码正在使用它们。

有没有办法找出来?

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

【问题讨论】:

    标签: memory-management windbg


    【解决方案1】:

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

    要找出使实例保持活动状态的原因,请使用!gcroot 命令。您可能还想查看 sosex.dll 中的 !refs 命令。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-05-07
        • 2020-08-12
        • 1970-01-01
        • 2020-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        相关资源
        最近更新 更多