query: tag:valgrind

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

例)valgrind.supp

pre>>
{

Memcheck:Leak
fun:malloc
fun:_nc_table_insert_n
fun:token_table_add
fun:notify_register_check
fun:notify_register_tz
fun:tzsetwall_basic
fun:localtime
fun:ctime
}
<<--

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

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

pre>>
{

Memcheck:Leak
fun:malloc
...
fun:localtime
}
<<--

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

posted by genki genki on Mon 5 Apr 2010 at 14:32 with 0 comments

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

方法:

pre>>
% svn co svn://svn.valgrind.org/valgrind/trunk -r 11100 valgrind
% cd valgrind
% wget "http://bugsfiles.kde.org/attachment.cgi?id=36999" -O thepatch
% cat thepatch | patch -p0
% ./autogen.sh
% ./configure
% make

make install

<<--

これでokです。

posted by genki genki on Mon 5 Apr 2010 at 10:18 with 0 comments