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すごい!