当前位置:  开发笔记 > 编程语言 > 正文

限制!dumpheap(windbg)输出到n个对象

如何解决《限制!dumpheap(windbg)输出到n个对象》经验,为你挑选了2个好方法。

使用windbg和running!dumpheap命令查看对象的地址时,如何限制特定数量的对象.我发现的唯一方法是在博客上使用CTRL + BREAK和命令行http://dotnetdebug.ne​​t/2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system /

-l X - 仅打印每个堆中的X个项而不是所有对象.

显然-l不再存在于SOS.dll中



1> Mitch Wheat..:

你究竟在寻找什么?在查看单个对象之前,通常会缩小感兴趣的区域.

-stat开关显示堆上每种类型对象的摘要.

DumpHeap [-stat] [-min] [ - max] [-thinlock] [-mt] [-type] [start [end]]

-stat选项将输出限制为统计类型摘要.

-min选项忽略小于size参数的对象,以字节为单位指定.

-max选项忽略大于size参数的对象,以字节为单位指定.

-thinlock选项报告ThinLocks.有关更多信息,请参阅SyncBlk命令.

-mt选项仅列出与指定MethodTable结构对应的那些对象.

-type选项仅列出那些类型名称是指定字符串的子字符串匹配的对象.

start参数从指定的地址开始列出.end参数停止在指定地址列出.

参考.


假设你有150k条目,大小和类型相同(就我而言) - 你怎么能找到其中一个的单一地址?如果你打印出完整的清单,那么你注定要在接下来的30分钟内中断清单(除了杀死这个过程)

2> Thomas Welle..:

根据哪个标准,您希望限制输出数量?-l选项仅根据行号限制输出.这是没用的:假设它只显示前10个对象,也许你要查找的对象甚至没有列出.

如果WinDbgs输出窗口的输出太长,请使用.logopen将对象转储到文件中,然后使用文本编辑器查看该文件.

如果您对对象的外观有其他想法,则可以对所有对象执行循环

.foreach ( obj { !dumpheap -short -type MyType} )

然后决定.if您的对象是否符合此条件.

举个例子,我正在寻找大海捞针.我在一个程序中搜索特定的Hashtable,堆上有超过3000个Hashtables.我试图使用的命令是

.foreach ( obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }

1C 是哈希表的count成员的偏移量.

100 是Hashtable预计至少具有的项目数.

不幸的是,它不能立即用于Hashtables,因为!dumpheap -type还列出了HashtableEnumerators,它以某种方式崩溃了调试器.

要仅转储哈希表,请运行!dumpheap -stat并找出哈希表的方法表并运行命令-mt 而不是-type ,而不是

.foreach ( obj { !dumpheap -short -mt  }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有