プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

mtraceの使い方 このエントリーをはてなブックマークに追加

何回調べても忘れてしまうシリーズ

今回はmtraceの使い方。
mtraceというのはmallocやfreeなどのメモリ管理系の関数をHookして、メモリリークを追跡してくれる便利なライブラリ関数です。
glibc付属なので特殊なソフトのインストールが必要ないのが利点。

使い方の注意点と手は Electric Fence などのmallocを乗っ取るライブラリと共用できないこと(アタリマエだ)
malloc/freeのたびにファイルに書くので結構なオーバーヘッドを伴うこと。
スレッドセーフじゃないこと(これはmallocのhookの仕組みがタコいんです)
mtrace()関数を呼び出すとトレースを開始する。というセマンティクスなのでシェルなどからイマイチ使いづらい所も欠点と言える。



まあ、実例を見てください。


まず、こういうファイルを用意

 mtrace_on.c
----

#include <mcheck.h>

static void mtrace_start(void) __attribute__((constructor));
static void mtrace_end(void) __attribute__((destructor));

static void
mtrace_start(void)
{
mtrace();
}

static void
mtrace_end(void)
{
muntrace();
}


適当に、メモリリークしてるファイルを用意

  main.c
-----
main(){
void* a;
a = malloc(1000);
}



コンパイル&実行

$ gcc  main.c -g
$ gcc mtrace_on.c -o mtrace_on.so -shared
$ export set MALLOC_TRACE="./mtrace.log"
$ LD_PRELOAD="./mtrace_on.so" ./a.out
$ mtrace a.out mtrace.log

Memory not freed:
-----------------
Address Size Caller
0x6000000000004460 0x3e8 at /home/kosaki/projects/mtrace/main.c:3



mtraceコマンドにa.outを渡さなければCallerがアドレスで表示されるのでマクロを駆使していて行番号だけでは分からんときはそれで。

しかし、なんでいちいち自分で共有ライブラリ作らんとあかんのよ。不親切だなぁ


アンジェリーク
○○○リーク! ランキング!
関連記事


linux | 【2006-05-19(Fri) 12:25:16】 | Trackback:(0) | Comments:(3)
コメント
このコメントは管理人のみ閲覧できます
2007-09-02 日 10:06:59 | | # [ 編集]
このコメントは管理人のみ閲覧できます
2007-10-09 火 23:57:22 | | # [ 編集]
このコメントは管理人のみ閲覧できます
2007-12-18 火 15:31:24 | | # [ 編集]
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。