您希望根据哪些标准来限制输出数量?-l选项仅根据行号限制输出。这是无用的:假设它只显示前10个对象,也许您正在寻找的对象甚至没有列出。
如果输出对于WinDbg的输出窗口太长,请使用.logopen将对象转储到文件中,然后使用文本编辑器查看文件。
如果您有关于对象外观的其他想法,则可以对所有对象执行循环。
.foreach ( obj { !dumpheap -short -type MyType} )
然后使用.if
来判断您的对象是否符合这些标准。
例如,我正在一堆草堆中寻找针。我正在搜索程序中具有3000个以上哈希表的特定哈希表。我尝试使用的命令是:
.foreach ( obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
1C
是Hashtable计数成员的偏移量。
100
是Hashtable预期至少具有的项目数量。
不幸的是,它并不适用于Hashtables,因为!dumpheap -type
还列出了HashtableEnumerators,这些东西会导致调试器崩溃。
要仅转储hashtables,请运行!dumpheap -stat
并找出hashtable的方法表,然后使用-mt <methodtable>
而不是-type <classname>
运行该命令,该命令给出:
.foreach ( obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }