根据哪个标准限制输出数量? -l选项只是根据行号限制输出。这是没用的:假设它只显示前10个对象,可能您要查找的对象甚至没有列出。
如果WinDbgs输出窗口的输出太长,请使用.logopen将对象转储到文件中,然后使用文本编辑器查看该文件。
如果您有其他的想法你的对象的样子,你可以在所有对象
.foreach (obj { !dumpheap -short -type MyType})
,然后用.if
决定你的对象是否不符合此条件进行循环。
作为一个例子,我在干草堆里寻找一根针。我在堆上搜索超过3000个Hashtables的程序中的特定Hashtable。我尝试使用的命令是
.foreach (obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
1C
在哈希表的计数部件的偏移量。
100
是Hashtable预计将至少有项目的数量。
不幸的是,它不能立即用于哈希表,因为!dumpheap -type
也列出了HashtableEnumerators,它以某种方式崩溃了调试器。
要只转储哈希表,运行!dumpheap -stat
并找出哈希表的方法表,并与-mt <methodtable>
代替-type <classname>
,这给
.foreach (obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
我知道这是一个老问题上运行的命令,但你设法找出答案? – 2015-09-28 07:22:14