Programming

■ Step05 MemProofの使い方

 複雑なアプリケーションを作っていると、いきなり落ちたり警告されたりと色々と困ったことになります。こういうときの原因は大体は自分にあるんですが、たまにDELPHIのバグだったりコンポーネントのバグだったりもしますが。でも、デバッグしてても原因となる場所がわかんなかったりするときもあります。そういうときなどに、フリーウェアで手軽にメモリリークや解放忘れをチェックできるのが「MemProof」です。現バージョンはチョッと不安定ですが(^^;ないよりはましのツールです。

 

 まずMemProofの入手先はこちら (2004/4/16現在)

http://www.automatedqa.com/
http://www.automatedqa.com/downloads/memproof.asp

右下の画像をクリックして一番上の
Zipped Archive - Without Installation Program and Without Help File (1,861,668 bytes) でダウンロードです.。なんかアンケートみたいな画面が出ますが気にせずに「continue」をクリックするとダウンロードが始まります。

また一番下の
Zipped Archive - Without Installation Program (1,596,906 bytes) にはヘルプファイルとチュートリアルファイルが同梱されています。

 ダウンロードしたファイルを解凍したらOKです。

MemProof (Build 0.948 October 18, 2002) で Delphi6・Delphi7にも対応した模様。


 まずDELPHI側の準備ですが、EXEファイルにデバッグ情報を入れてコンパイルしないといけません。

 「プロジェクト」−「オプション」の「プロジェクト オプション」画面で

  1. 「コンパイラ」タブの「最適化」を外す
  2. 「コンパイラ」タブの「スタックフレームの生成」をチェックする
  3. 「コンパイラ」タブの「デバッグ情報」をチェックする
  4. 「コンパイラ」タブの「デバッグ版DCUを使う」をチェックする
  5. 「リンカ」タブの「TD32デバッグ情報を含める」にチェックする

で、念のため「再構築」してください。

 

 あんまりいい例ではありませんが、メモリリークするソースを作ります。ソースへの突っ込みはご遠慮願います。で、デバッグ情報付でコンパイルします。EXEのサイズが2MB超えますが気にしない。

 memp0935.zipのファイル内にあるチュートリアルファイルには色々開放し忘れのソースがありますのでそちらも参考にしてみてください。


ホント めちゃくちゃですな(^^;

 

 MemProofを起動します。「File」−「Open」で先ほどのEXEファイルを選択します。そして「Run」−「Run」で実行します。



 

 で、適当に操作したあとアプリケーションを終了させると、メモリ・リソースの開放し忘れを表示してくれます。DELPHIのソース内で発見した場合はソースの場所まで提示してくれます。これが便利なんです。

 「Resource Counters」の「Resource Count」「Current #」が現在も確保しているリソースの数なので、終了しても0(ゼロ)じゃないということは開放していないということになります。



 

注意点!!

 新規プロジェクトを作成してMemProofでチェックしても必ず3箇所リーク(Errorsに2個 Memoryに1個)があるといわれます。これはDELPHIの問題であると思いますので気にしなくてもいいはずです。修正方法を知っておられる方はご一報ください。


 

 チェックし終わってリリースするときには「TD32デバッグ情報を含める」のチェックを外すのをお忘れなく...

 

<<Step04 

Programming