在windbg中做一些调试,我希望能够完成给定大小的每个堆分配,然后对其进行一些分析(现在只是dd)。问题是!堆不会非常干净地丢弃东西。
我知道我可以使用.foreach标记跳过第一个X或每个Y标记,但似乎无法使其工作。
基本上要做这样的事情:
.foreach (ADDR {!heap -flt s <size of allocation>}) {dd ADDR}
有没有办法,没有输出到文件,做一些awking,然后再送回来?
答案 0 :(得分:1)
我在同一个问题上寻找答案,这是我找到的最简单方法:
运行
!heap -flt s [your alloc size]
Ctrl + A ,在某些文本文件中复制并过去,例如c:\temp\test.txt
。
从文件中删除所有不必要的行,如下所示:
0000000011af12e0 0400 0000 [00] 0000000011af12f0 03ff0 - (busy)
0000000011af52e0 0400 0400 [00] 0000000011af52f0 03ff0 - (busy)
0000000011af92e0 0400 0400 [00] 0000000011af92f0 03ff0 - (busy)
0000000011afd2e0 0400 0400 [00] 0000000011afd2f0 03ff0 - (busy)....
然后在 WinDbg 命令中运行,如:
.logopen /t c:\temp\Output.txt
将您的进一步输出保存到某个文件,因为您将有一个loooong。
最后,使用file作为参数运行foreach:
.foreach /pS4 /ps3 /f ( obj "c:\temp\test.txt" ) { !heap -p -a obj }
万岁!它有效:)
答案 1 :(得分:0)
AFAIK我不认为!heap
命令在.foreach
中有一个简短的选项。您可以尝试使用.shell
命令来grep输出
HTH