2013年8月28日水曜日

Lazarus での Memory Leak チェック

Lazarus IDE での Memory Leak のチェック。
Delphi では FastMM にお世話になりましたが。

プロジェクトオプション→コンパイラオプション

デバッグ中: (上段)
  実行時エラーの後方探索で行番号を表示 (-gl) をチェック

デバッグ中: (中段)
  Heaptrcユニットを使用 (-gh) をチェック。






以上で heaptrc を uses に書かなくても heaptrc が使われるようになり、SetHeapTraceOutput等が使えるようになります。

GDBのためのデバッグ情報生成もチェックしておいてください。


これだけだと、アプリケーション終了時にメッセージダイアログで情報が表示されてしまいます。

プロジェクトファイル(.lpr) の 冒頭に (beginの後)

  if FileExists('heap.trc') then DeleteFile('heap.trc');
  SetHeapTraceOutput('heap.trc');

を追加しておきます。
こうすると heap.trc が出力されるようになります。
heap.trc はメモ帳等で開いても読めますが、それを IDE のメニューの「ツール」→ Leak View から読み込むと heap.trc の内容をIDEで表示してくれます。

項目をクリックするとその行にジャンプもできます。

なお、FileExists は SysUtils を要求します。

モードの構築で、Memory Leak Check などを定義し(前の記事参照
-dLEAKCHECK を「その他」のカスタムオプションに設定し、前述のオプションも含めてしまい

uses
{$IFDEF LEAKCHECK},SysUtils{$ENDIF}

begin の後に
{$IFDEF LEAKCHECK}
  if FileExists('heap.trc') then DeleteFile('heap.trc');
  SetHeapTraceOutput('heap.trc');
{$ENDIF}

としておけば、切り替えも簡単です。


関連


0 件のコメント:

コメントを投稿