mtraceを使ってみる
メモリリークが発生しているっぽいので、gccで使えるmtraceというメモリリーク検出ツールを試してみた。
mtraceはこんなツールです。
1) malloc,freeなどのメモリ管理関数から、メモリリークを追跡
してくれるツール
2) GNU mallocライブラリ付属関数なので、新たなパッケージ
をインストールしたりコンパイルする手間がはぶけるので便利
ふむふむ。とりあえず、やりたい事は実現できそうなので試してみる。
以下、この手順で実施。
gccの場合、mtraceというツールが使える。
使用手順は
1.環境変数:MALLOC_TRACE=[ログファイル名]を設定
2.プログラム改造:関数 mtrace()、 muntrace() を挿入。(この間のmalloc, freeがカウントされる)
3.コンパイル: -g オプションをつける。(gcc -g hoge.c)
4.ログ解析:mtrace [プログラム名] [ログファイル名]
1〜3まで完了。生成された実行ファイルを実行させてみると、ちゃんとファイルが出力された。
1 = Start
2 @ /lib/libc.so.6:[0xcb5faf] + 0x805f378 0x160
3 @ /lib/libc.so.6:(__strdup+0x30)[0xcccb80] + 0x805f4e0 0xf
4 @ /lib/libc.so.6:[0xcb5faf] + 0x805f4f8 0x160
5 @ /lib/libc.so.6:[0xce14f2] + 0x805f660 0x54
6 @ /lib/libc.so.6:(fclose+0x136)[0xcb5676] - 0x805f4f8
7 @ /lib/libc.so.6:[0xce0181] + 0x805f4f8 0xc
8 @ /lib/libc.so.6:[0xce0181] + 0x805f508 0xc
9 @ /lib/libc.so.6:[0xce0181] + 0x805f518 0xc
10 @ /usr/lib/libstdc++.so.6:(_Znwj+0x27)[0x3332b27] + 0x805f6b8 0x190
11 @ /usr/lib/libstdc++.so.6:(_Znwj+0x27)[0x3332b27] + 0x805f850 0x4b0
12 @ /usr/lib/libstdc++.so.6:(_Znwj+0x27)[0x3332b27] + 0x805f528 0x1
で、「4」。コマンドライン上でmtraceを実行させて、ログファイルを解析しようとしたところ、mtraceコマンドがない。
ってな記述があるから、パッケージの追加は必要ないのかと思っていたけど、調べてみるとmtraceコマンドは「glibc-utils」パッケージに含まれているそうで、現在の環境にはインストールされていなかった事が判明。なので早速yumでinstall
# yum install glibc-utils
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
glibc-utils i386 2.5-24 base 126 k
Updating for dependencies:
glibc i686 2.5-24 base 5.2 M
glibc-common i386 2.5-24 base 16 M
glibc-devel i386 2.5-24 base 2.0 M
glibc-headers i386 2.5-24 base 610 kTransaction Summary
=============================================================================
Install 1 Package(s)
Update 4 Package(s)
Remove 0 Package(s)
他のパッケージも依存しているようなので、一緒に更新。
これで無事、mtraceコマンドを使用する事が出来た。
これでメモリリークを検出できるかどうか、バグが修復できるかどうかは、また別な話。がんばるぞ。
Binary Hacks ―ハッカー秘伝のテクニック100選
- 作者: 高林哲,鵜飼文敏,佐藤祐介,浜地慎一郎,首藤一幸
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/11/14
- メディア: 単行本(ソフトカバー)
- 購入: 23人 クリック: 383回
- この商品を含むブログ (223件) を見る
Debug Hacks -デバッグを極めるテクニック&ツール
- 作者: 吉岡弘隆,大和一洋,大岩尚宏,安部東洋,吉田俊輔
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 12人 クリック: 419回
- この商品を含むブログ (73件) を見る
実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング
- 作者: Norman Matloff,Peter Salzman,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/06/08
- メディア: 大型本
- 購入: 10人 クリック: 199回
- この商品を含むブログ (31件) を見る