2008年07月09日

WinDbgでハンドルリークのデバッグ

WinDbgを使ってハンドル(カーネルオブジェクト)のリークをデバッグする方法

1. !htrace -enable
2. !handle コマンドでリーク前のハンドル使用状況を出力し、テキストに保存
3. アプリケーションを動かしてリークさせる
4. !handle コマンドでリーク後のハンドル使用状況を出力し、テキストに保存
5. diff BeforeLeak.txt AfterLeak.txt | grep '> Handle' > LeakHandles.txt
6. LeakHandles.txt をエディタで開いて、"> Handle "を"0x"に置換してリークしたと疑われるハンドルIDのリスト完成
7. .foreach /f (hid "C:\LeakHandles.txt") { !htrace hid 1 }

これで、リークしたと疑われるハンドルを最後に操作したコードのスタックトレースが表示されます。

WinDbgすごい!

Posted by Akihiro at 19:21 | Comments (181) | TrackBack