【发布时间】:2012-05-25 10:58:37
【问题描述】:
我正在研究 SOS 命令及其输出,但我注意到似乎没有办法以某种方式获取当前正在使用的所有类型。迄今为止最好的方法是!dumpheap -stat,但它只列出存在实例的类型。
但是,当 ValueType 从未被装箱时,该类型将不会显示在 !dumpheap -stat 上。 (这并不奇怪,因为它们不是在堆上分配的。)
所以我的问题是:
是否有任何有效的方法来确定当前存在哪些附加值类型?
我的意思是,我可以在检查单个堆对象时按需加载它们(类似于基于!do <address> 输出的!dumpvc <mt> <address>),但是对于显示的统计数据,通过比查看更简单的方式找到类型会很好(实例/class 定义)所有已知的类,以确定它们是否使用任何额外的值类型。
【问题讨论】:
-
奇怪的问题。为什么知道程序使用 System.Int32 会有用呢? !dumpmodule -mt 列出模块中的所有类型,包括值类型。
-
我不是很喜欢 Int32 和类似的基本类型。具有多个成员的复合类型是有趣的部分,例如
System.Drawing.Color,它由一个字符串、一个 long 和两个 short 组成。
标签: clr windbg value-type sos dbghelp