【问题标题】:Windbg, !heap output to .foreachWindbg, !heap 输出到 .foreach
【发布时间】:2011-04-21 22:40:53
【问题描述】:

在 windbg 中进行一些调试,我希望能够检查给定大小的每个堆分配,然后对其进行一些分析(现在只是 dd)。问题是 !heap 不会很干净地扔掉东西。

我知道我可以跳过带有 .foreach 标志的第一个 X 或每个 Y 标记,但似乎无法让它工作。

基本上想做这样的事情:

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

有没有办法,除了输出到一个文件,做一些 awking 然后把它反馈回来吗?

【问题讨论】:

    标签: windbg


    【解决方案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
      

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

    5. 最后,使用文件作为参数运行你的 foreach:

      .foreach /pS4 /ps3 /f ( obj  "c:\temp\test.txt" ) { !heap -p -a obj } 
      

    万岁!它有效:)

    【讨论】:

      【解决方案2】:

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

      HTH

      【讨论】:

      • 呃,为了得到如此简单的东西,需要解析一大堆!不过感谢您的回答。
      猜你喜欢
      • 2014-07-04
      • 2015-01-18
      • 2012-10-15
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2022-10-13
      相关资源
      最近更新 更多