#topicpath #author("2018-07-09T14:49:21+00:00","","") ///////////////////////////////////////////////////////////////////////////////// * 目次 [#j423fad7] #contents(); ///////////////////////////////////////////////////////////////////////////////// * 調査ツール [#wbc9a0f5] //=============================================================================== ** valgrind [#kc13d385] //------------------------------------------------------------------------------- *** 使い方 [#je53c69b] + ''-g'' 付きでビルド + 下記コマンドで実行する # valgrind --tool=memcheck --leak-check=yes <program-file-name> //------------------------------------------------------------------------------- *** vgcore [#v0255d98] - coredump した場合、 vgcore.<PID> という名前でファイルを出力する。 - vgcore は、通常の core と同様、 gdb に読み込ませて解析に使用出来る。 //------------------------------------------------------------------------------- *** 特徴 [#j3dafdc2] - スレッドセーフである - プロセス全体の起動から終了までを調べることしか出来ないため、部分的な検査は面倒になる。 //=============================================================================== ** mtrace [#f2d6f462] //------------------------------------------------------------------------------- *** 使い方 [#nc3a0a4a] + ヘッダをインクルードする #include <mcheck.h> + リークのテストを開始したい場所で ''mtrace()'' をコール + 終了したい場所で ''muntrace()'' をコールする + ''-g'' つきでコンパイル + 環境変数 ''MALLOC_TRACE'' を export する # export MALLOC_TRACE=<log-file-name> + プログラムを実行する - ${MALLOC_TRACE} に出力されたログの例 = Start @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b22fe] + 0x8049a98 0x1 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b22fe] + 0x8049aa8 0x1 @ /usr/lib/libstdc++.so.5:(_ZdlPv+0x23)[0x400b0de3] - 0x8049aa8 @ /usr/lib/libstdc++.so.5:(_Znwj+0x2e)[0x400b22fe] + 0x8049ab8 0x64 = End ~ ここで、 + は new - は delete + 以下の環境変数を指定することでメモリ領域の破壊などについてはデバッグしやすくなるかもしれません。 export MALLOC_CHECK_=”値” 値は0〜3です。 MALLOC_CHECK_ = 0 何もしない MALLOC_CHECK_ = 1 標準エラー出力に診断メッセージ表示 MALLOC_CHECK_ = 2 abort MALLOC_CHECK_ = 3 1と2の両方 //------------------------------------------------------------------------------- *** 特徴 [#kfaa7f43] - スレッドセーフではない - ソース内でどこからどこの間でリークを調べたいかを指定できる ///////////////////////////////////////////////////////////////////////////////// * 参考リンク [#xaf6b376] - [[メモリーリークの検出:mtrace , valgrind>http://blogs.itmedia.co.jp/komata/2009/10/mtrace-valgrind.html]] - [[メモリーリーク調査方法>http://www.nianyan.net/library/memory.html]]