获取未在!dumpheap -stat中列出的ValueTypes的名称/ MT的有效方法

时间:2012-05-25 10:58:37

标签: clr windbg value-type sos dbghelp

我正在绕过SOS命令及其输出,但我注意到似乎没有办法真正获得当前正在使用的所有类型。到目前为止,最好的方法是!dumpheap -stat,但它只列出了有实例的类型。 但是,如果从未将ValueType装箱,则该类型不会显示在!dumpheap -stat上。 (这并不奇怪,因为它们没有在堆上分配。)

所以我的问题是: 有没有有效的方法来确定当前存在哪些额外的ValueType? 我的意思是,我可以在检查单个堆对象时按需加载它们(类似于基于!dumpvc <mt> <address>输出的!do <address>),但是对于显示的统计信息,通过一些比简单的方法找到类型更好。查看(实例/类定义)所有已知类,以确定它们是否使用任何其他ValueTypes。

1 个答案:

答案 0 :(得分:0)

似乎没有任何有效的方法来做到这一点。换句话说,我最终检查返回的每个类型!DumpHeap -stat是否是结构数组或包含结构字段。在这两种情况下,我都需要递归检查new-found结构类型是否也包含任何结构字段。在这种情况下,除非我已经看过结构类型,否则需要递归。

顺便说一下{p> !DumpModule -mt不是选项。例如,我看到System.Collections.Generic.List`1,但没有任何代表例如列表类。