我正在绕过SOS命令及其输出,但我注意到似乎没有办法真正获得当前正在使用的所有类型。到目前为止,最好的方法是!dumpheap -stat
,但它只列出了有实例的类型。
但是,如果从未将ValueType装箱,则该类型不会显示在!dumpheap -stat
上。 (这并不奇怪,因为它们没有在堆上分配。)
所以我的问题是:
有没有有效的方法来确定当前存在哪些额外的ValueType?
我的意思是,我可以在检查单个堆对象时按需加载它们(类似于基于!dumpvc <mt> <address>
输出的!do <address>
),但是对于显示的统计信息,通过一些比简单的方法找到类型更好。查看(实例/类定义)所有已知类,以确定它们是否使用任何其他ValueTypes。
答案 0 :(得分:0)
似乎没有任何有效的方法来做到这一点。换句话说,我最终检查返回的每个类型!DumpHeap -stat
是否是结构数组或包含结构字段。在这两种情况下,我都需要递归检查new-found结构类型是否也包含任何结构字段。在这种情况下,除非我已经看过结构类型,否则需要递归。
!DumpModule -mt
不是选项。例如,我看到System.Collections.Generic.List`1
,但没有任何代表例如列表类。