= オブジェクトリークチェッカー =
[http://translate.google.com/translate?u=http%3A%2F%2Fsourceforge.jp%2Fprojects%2Fobcheck%2Fwiki%2FFrontPage&langpair=ja%7Cen&hl=ja&ie=UTF-8&oe=UTF-8&prev=%2Flanguage_tools English]
== コレは何? ==
!CloseHandle忘れや、fclose忘れなどのオブジェクトリークを自働検出します。
== どうやって使うの? ==
stdafx.h みたいなすべてのファイルから参照されるヘッダーファイルに[[BR]]
[[BR]]
#include "obcheck.h" //オブジェクトリークチェッカー[[BR]]
[[BR]]
と、記述してください。デバッグビルド時に、リークしているかもしれないオブジェクトを表示します。リリースビルド時には無力化されます。
(内部でスレッドを生成しているので、シングルスレッドのプログラムに組み込む場合、 プロジェクトの設定でマルチスレッドに切り替えてください)
youtube にデモを上げました。[[BR]]
http://www.youtube.com/watch?v=Uu-EDiiW_iQ
== どうやって実装しているの? ==
自分自身に API フックをかけて、フックした内部でスタックトレースをしてソースコードを突き止めています。[[BR]]
(もしかしたら、NX BIT な環境で動かないかもしれません。環境が無いので検証できていません。)
== FAQ ==
=== コンパイルエラーになりました。 ===
エラーメッセージをコピペして報告してください。
=== ソースコードの行数が表示されない。 ===
Microsoft の dbghelp.dll のバージョンによってはうまくいかない場合があるようです。
過去のバージョンでうまく動作するのに最新のバージョンで動作しない場合があったりします。
こちらでは次のバージョンで動作を確認しています。
dbghelp.dll 5.0.2195.6613
一応対策として、次の方法があります。
リークの表示で: {123} Object:000003AC とかなっているところの {123}は確保番号になっています。
プログラムの最初で Obcheck_SetBreakCount(123); と、やると、{123} 番目のオブジェクトが確保されたときにブレークします。
これを利用して手動で場所を特定してください。
=== ダイナミックライブラリ dbghelp.dll が見つからないとかエラーがでました。 ===
Debugging Tools for Windows を入れるとインストールされます。[[BR]]
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx から入れるダウンロードしてください。
=== プログラムに組み込んでみたら動作がとても遅くなったのですが。 ===
スタックトレースにスレッドが必要になるので、オーバーヘッドがどうしてもあります。
スレッドプール等を行うともう少し速度は出せるとは思いますが、まだ実装をしていません。
確かに常時使うと重すぎるので、マイルストーンなどをリリースする前に有効にし、
チェックするなどの利用をされてはいかがでしょうか。
=== なぜ define で実装しなかったのか? ===
未公開の初期版は define で実装したのですが、それではランタイム等の中まで調査することができません。
現在、自分自身のプロセスのみを監視していますが、将来的には、読み込んだ dll の中まで監視するつもりでいます。
そのため、APIフック と スタックトレースっていう重い方法で実装いたしました。
=== 誤検出や検出漏れがありました!! ===
誤検出や検出漏れの内容を報告してください。出来るだけの対処は行いたいと思います。[[BR]]
報告先[[BR]]
http://sourceforge.jp/tracker/index.php?group_id=3175&atid=11793&func=add
== 今後 ==
* リークが多いと思われるGDI周り対応
* うに(unicode)対応
* FAQをみさくら語にする
== 歴史 ==
* 0.1 初期リリース