获取 !dumpheap -stat 中未列出的值类型的名称/MT 的有效方法



我正在解决 SOS 命令及其输出,但我注意到似乎没有一种方法可以以某种方式获取当前正在使用的所有类型。到目前为止,最好的方法是 !dumpheap -stat ,但它只列出有实例的类型。但是,当 ValueType 从不装箱时,该类型将不会显示在 !dumpheap -stat 上。(这并不奇怪,因为它们不是在堆上分配的。

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

似乎没有任何有效的方法可以做到这一点。换句话说,我最终检查了返回!DumpHeap -stat每种类型,以确定它是结构数组还是包含结构字段。在这两种情况下,我都需要递归检查新发现的结构类型是否也包含任何结构字段。在这种情况下,递归是必需的,除非我已经看到了结构类型。

顺便说一句,!DumpModule -mt不是选择。例如,我看到System.Collections.Generic.List`1,但没有任何东西可以代表例如 List 类。

相关内容

最新更新