• R/O
  • SSH
  • HTTPS

obcheck: レポジトリ概要


最近のコミット RSS

Rev. 日時 作者 メッセージ
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

readme.txt

オブジェクトリークチェッカー 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
初期リリース



旧リポジトリブラウザで表示