2010-10-06 79 views
1

在windbg中做一些調試,我希望能夠通過給定大小的每個堆分配,然後對其進行一些分析(現在只是dd)。問題是!堆不會非常乾淨地扔掉東西。Windbg,!堆輸出到.foreach

我知道我可以用.foreach標誌跳過第一個X或Y標記,但似乎無法使其工作。

基本上希望做這樣的事情:

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

有沒有一種方法,短outputing到一個文件,做一些awking,然後將其反饋的?

回答

0

AFAIK我不認爲!heap命令有一個簡短的選項用於.foreach。你也許可以嘗試使用.shell命令到grep輸出

HTH

+0

呃,這是一堆解析出來的東西這麼簡單!但感謝您的答案。 – Peck 2010-10-06 18:49:06

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作爲參數:

    ​​

萬歲!它的作品:)