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 on Mon 5 Apr 2010 at 14:32 with 0 comments