Valgrindを使うとメモリリークの検出などを行うことができて便利ですが、 OSやライブラリに起因するメモリリークのレポートが大量に出てくると邪魔なため、backtraceのパターンを指定して抑制(suppress)することができます。

例)valgrind.supp

   1  {
   2     <insert_a_suppression_name_here>
   3     Memcheck:Leak
   4     fun:malloc
   5     fun:_nc_table_insert_n
   6     fun:token_table_add
   7     fun:notify_register_check
   8     fun:notify_register_tz
   9     fun:tzsetwall_basic
  10     fun:localtime
  11     fun:ctime
  12  }

funはbacktrace上の関数名を示しますが、全体をマッチさせる場合、 呼び出し経路ごとに異なったパターンになるため、 沢山登録する必要が出てきてしまいます。

最新のValgrind(valgrind-3.6.0.SVNで確認)では、 "..." 記法によって中間のパターン指定を省略することが できるようになりました。 これを使用すると、先程の例は以下のように書き直せます。

   1  {
   2     <insert_a_suppression_name_here>
   3     Memcheck:Leak
   4     fun:malloc
   5     ...
   6     fun:localtime
   7  }

localtime関数を呼び出したあとに、内部のmalloc呼び出しで 発生したメモリリークを全部一括で抑制できます。便利ですね。

posted by Png genki on Mon 5 Apr 2010 at 14:42

残念ながら現時点のSVNのtrunkを使っても、SnowLeopardにValgrindをインストールしようとすると configure時にエラーが出ますが、以下のパッチをあてることでインストールできるようになるようです。

方法:

   1  % svn co svn://svn.valgrind.org/valgrind/trunk -r 11100 valgrind
   2  % cd valgrind
   3  % wget "http://bugsfiles.kde.org/attachment.cgi?id=36999" -O thepatch
   4  % cat thepatch | patch -p0
   5  % ./autogen.sh
   6  % ./configure
   7  % make
   8  # make install

これでokです。

posted by Png genki on Mon 5 Apr 2010 at 10:25
Contents
Valgrindでbacktraceの緩いパターンマッチを行い柔軟にsuppressする方法
ValgrindをSnowLeopardにインストールする方法のメモ
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
KingofSmack: Here also good reads for this mobile applicatio... '14-5
Spencer: You don't have to re-compile it, this version w... '14-4
staiano: Any chance we can get a recompile for 10.9? '14-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ