什么是 !dumpheap?
!dumpheap是来自SOS扩展的命令,用于转储托管堆的内容。您可以获得堆上当前活动的所有托管对象的所有地址和一些附加信息。
在WinDbg的最后两个版本中,SOS实际上被PSSCOR取代,它有一个很好的帮助系统。对于大多数命令,您只需键入“!help commandName”,例如,“!help dumpheap”,您将获得关于参数和如何使用的详细帮助。
!dumpheap 参数
- -stat–只输出堆上所有类型对象的统计摘要、它们的计数和它们自己的大小(不带引用)
- -nostrings–排除字符串的输出(不使用-stat时)。
- -gen X–仅输出属于X代的对象,其中X可以具有以下值:对于1.1–0、1、2和3,对于大型对象(大于85Kb的对象,没有其引用)。对于1.0,除了使用-1而不是3。
- -min X–忽略小于X的对象(其中X是字节数)。
- -max X–忽略大于X的对象(其中X是字节数)。
- -mt MethodTable–仅列出具有给定MethodTable的对象。
- -type type–仅列出类型名为math类型的子字符串的对象。
- -缓存–将对象保存在内部缓存中以供以后使用(有助于加快速度,而不是重新扫描堆)。
- -lx–只打印每个堆中的X个项,而不是所有对象。
- -short–只打印出对象地址。用于与.foreach命令组合使用。
- -fix START END–使用给定的起始地址和结束地址,只扫描这些地址之间的堆。
注意:如果我没记错的话,-cache、-nostring和-short都是在最近两个版本的SOS(以前是PSSCOR)中添加的新命令,其余命令在大多数版本的SOS中都可以使用相当长的时间。
-short参数
你可以说,第二代的内容是如何打印的。在-short命令之前,你必须运行“!dumpheap-gen2“将输出复制到记事本,解析它,只留下对象地址,然后你就可以手动运行!do对每个地址执行操作,或将.foreach与/f命令一起使用。
现在,使用-short,您只需运行以下命令行:
.foreach ( obj { !dumpheap -gen 2 -short } ) { !do ${obj} }