Windbg,!堆输出到.foreach

时间:2010-10-06 16:27:11

标签: windbg

在windbg中做一些调试,我希望能够完成给定大小的每个堆分配,然后对其进行一些分析(现在只是dd)。问题是!堆不会非常干净地丢弃东西。

我知道我可以使用.foreach标记跳过第一个X或每个Y标记,但似乎无法使其工作。

基本上要做这样的事情:

.foreach (ADDR {!heap -flt s <size of allocation>}) {dd ADDR}

有没有办法,没有输出到文件,做一些awking,然后再送回来?

2 个答案:

答案 0 :(得分:1)

我在同一个问题上寻找答案,这是我找到的最简单方法:

  1. 运行

    !heap -flt s [your alloc size]
    
  2. Ctrl + A ,在某些文本文件中复制并过去,例如c:\temp\test.txt

  3. 从文件中删除所有不必要的行,如下所示:

    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)....
    
  4. 然后在 WinDbg 命令中运行,如:

    .logopen /t c:\temp\Output.txt
    

    将您的进一步输出保存到某个文件,因为您将有一个loooong。

  5. 最后,使用file作为参数运行foreach:

    .foreach /pS4 /ps3 /f ( obj  "c:\temp\test.txt" ) { !heap -p -a obj } 
    
  6. 万岁!它有效:)

答案 1 :(得分:0)

AFAIK我不认为!heap命令在.foreach中有一个简短的选项。您可以尝试使用.shell命令来grep输出

HTH