2010年3月15日月曜日

メモリリークの検出

メモリリークの検出方法

・mtrace
glibcに付属している関数。
使用方法
検出したい個所の前後にmtrace(), muntrace()を実行。

#include
...
mtrace();
---- 処理-----
muntrace();

ただし、検出結果の出力先をあらかじめ、環境変数に設定する必要がある。
export MALLOC_TRACE=[出力結果ファイル名]
さらにmtrace()関数はglibc付属だが、出力結果を解析するコマンドはglibc-utilsパッケージ内に存在する。
yum install glibc-utils
yum install glibc-utils
mtrace [実行ファイル名] [出力結果ファイル名]

プログラム中に関数を埋め込まなければならない。
-外部ライブラリも-gでコンパイル必要?
-new, deleteだとCallerがアドレス表示?
めんどそうなんでやめやめ

・valgrind


yum install valgrind
valgrind --leak-check=full [実行ファイル名]

楽チン。いつもお世話になってます。

Conditional jump or move depends on uninitialised value
→ 初期化していない領域を触っているとき