読者です 読者をやめる 読者になる 読者になる

memory leak buster (2)

以前作ったメモリリーク検出器がとても役立っていて、今も機能追加を加えつつ使っています。
最近大きな改良を加えたので再掲。
MemoryLeakBuster

実行時にイミディエイトウィンドウから呼ぶデバッグ機能を追加したのが主な変更で、以下のようなことができるようになりました。

・範囲指定リークチェック
デバッガで止めて範囲指定することで、そこで確保されたまま開放されなかった領域のコールスタックを出します。

・指定アドレスの確保時のコールスタック出力
近隣領域も表示し、stack 領域か static 領域か判別する機能も備わっています。デバッグの強力な手助けになっています。

アロケーションカウント
リークチェックではなく、単純に HeapAlloc() が呼ばれた回数をコールスタックと共に出力します。プロファイリングのお供に。
ちなみに、デバッガをつないでいる時は HeapAlloc() が非常に遅くなるらしく、1 フレームに数千とか数万のオーダーでメモリ確保しているような場合、F5 で起動すると遅いけど Ctrl+F5 で起動すると速いという、知ってないと混乱する自体が起きます。これはデバッグの設定で環境変数 _NO_DEBUG_HEAP=1 を指定しておくことでとりあえず回避できます。 (解説: http://preshing.com/20110717/the-windows-heap-is-slow-when-launched-from-the-debugger )


従来通り終了時にリーク箇所を出力しますが、設定ファイルを書くことで特定パターンを無視したり、リークチェック機能自体無効にしたりできるようになりました。


実装の詳細については以前の記事を参照。