| Rev. | Time | Author | Message |
|---|---|---|---|
| r6 | 2007-11-03 17:20:30 | rti | |
| r5 | 2007-11-03 17:10:06 | rti | |
| r4 | 2007-11-03 16:42:43 | rti | |
| r3 | 2007-11-02 21:31:51 | rti | |
| r2 | 2007-11-02 21:30:54 | rti | |
| r1 | 2007-11-02 21:14:08 | rti | first commit |
オブジェクトリークチェッカー ver 0.1
by rti
■コレは何?
CloseHandle 忘れや、fclose忘れなどのオブジェクトリークを自働検出します。
現在、次のAPIに対応しています。
OpenEventA
CreateEventA
CreateProcessA
CreateFileA
CreateFileMappingA
OpenFileMappingA
CreateThread
CreateMutexA
OpenMutexA
CreateSemaphoreA
OpenSemaphoreA
CreateNamedPipeA
CreatePipe
FindFirstFileA
FindClose
CreateToolhelp32Snapshot
RegOpenKeyExA
RegOpenKeyA
RegConnectRegistryA
RegCloseKey
RegCreateKeyExA
RegCreateKeyA
CloseHandle
■どうやって使うの?
stdafx.h みたいなすべてのファイルから参照されるヘッダーファイルに
#include "obcheck.h" //オブジェクトリークチェッカー
と、記述してください。
デバッグビルド時に、リークしているかもしれないオブジェクトを表示します。
リリースビルド時には無力化されます。
(内部でスレッドを生成しているので、シングルスレッドのプログラムに組み込む場合、
プロジェクトの設定でマルチスレッドに切り替えてください)
■どうやって実装しているの?
自分自身に API フックをかけて、フックした内部でスタックトレースをしてソースコードを突き止めています。
(もしかしたら、NX BIT な環境で動かないかもしれません。環境が無いので検証できていません。)
■FAQ (厨房バージョン)
Q:コンパイルエラーになったぞ、氏ね。
A:
うっさいだまれ。マジレスするとエラーメッセージをコピペして報告よろ。
Q:ソースコードの行数が表示されないぞ、詐欺ぢゃねーか。
A:
知るかボケ、Microsoft の dbghelp.dll のバージョンによってはうまくいかない場合があるみたいだ。
過去のバージョンでうまくいったのに最新のバージョンで動かなかったりするんだよ。
MSの問題だと思うのでビルおじさんに相談してくれ。
一応対策として、
: {123} Object:000003AC とかなっているヤツの {123}は確保番号になっている。
Obcheck_SetBreakCount(123); と、やると、{123} 番目のオブジェクトが確保されたときにブレークする。
これを利用して手動で場所を特定してくれ。
Q:ダイナミックライブラリ dbghelp.dll が見つからないとかエラーが出たぞ、なめてる?
A:
ググレカス。 Debugging Tools for Windows を入れると入るから黙って入れろ。
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx から入れるらしいヨ。
Q:これいれたらすげぇ遅くなった。使い物にならね。
A:
ぢゃあ使うなよ。
マジレスすると、スタックトレースにスレッドが必要になるから、そのオーバーヘッドがある。
スレッドプールとかやるともう少し速度が出ると思うが、作るの面倒なんだよ。だから、お前が早くしてくれ。
確かに常時使うと重すぎるので、マイルストーンを作るときぐらいにでも有効にするといいと思うヨ。
Q:何で define で実装しなかったの?
A:
初期版は define だったんだけど、それだと ランタイム等の中まで下りていけないぢゃん。
現在、自分自身のプロセスのみを監視しているが、将来的には、読み込んだ dll の中まで監視するつもりでいる。
だから、APIフック と スタックトレースっていう重い方法で実装しているんだヨ。
Q:誤検出や検出漏れがあった、このソフトは信用できない!
A:
だまって、ピューリファイでも買え。
で、でも、誤検出や検出漏れの内容をkwsk報告してくれると少し嬉しいかも。
べ、別にあんたのために対応するんぢゃないんだからねっ。
■開発環境
P4 2.4Gmhz / Windows 2000 / VC++6
VC 2003 でも動くとは思う、試していないけど。VC 2005は別物なんで動かない。
■今後
リークが多いと思われるGDI周り対応
うに(unicode)対応
FAQをみさくら語にする
■歴史
0.1
初期リリース