前言
valgrind 是检查内存泄漏的工具。如果我们的程序集成了第三方模块,但又不希望检查他们的内存泄漏问题,可以通过参数指定valgrind忽略他们。
suppressions 参数
suppressions 参数告诉valgrind忽略指定的错误,用法如下
valgrind --leak-check=full --error-exitcode=1 --suppressions=../test/valgrd_ignore.txt myapp appargs
suppressions 文件内容
suppressions 文件由若干个"{}"段组成,每个段包含3部分内容:
- 第一行为过滤描述,随便写
- 第二行为忽略的类型,Memcheck有7中类型,分别为Cond,Jump, Param, Free, Overlap, Leak, Value1~16, Addr1~16。
- 最后一部分为忽略条件。
{
ignore_cond_libs
Memcheck:Cond
...
fun:nginx_main
...
}
{
ignore_leak_libs
Memcheck:Leak
...
fun:nginx_main
...
}
suppressions 的说明参见:http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress
忽略条件
忽略条件可以指定为模块名或者函数名。
...
fun:nginx_main
...
这个条件的意思是指内存泄漏的调用栈中(前面任意个函数,后面任意个函数)包括函数nginx_main
gen-suppressions
如果不太确认如何判断内存泄漏类型和条件,可以通过参数--gen-suppressions=yes 来获取到这些信息。
Memcheck:Leak
match-leak-kinds: possible
fun:_Znam
fun:_ZN15ACE_SSL_Context16ssl_library_initEv
fun:_ZN15ACE_SSL_ContextC1Ev
fun:_ZN15ACE_SSL_Context8instanceEv
fun:_ZN7dbscale7SSLTool8ssl_initEv
fun:_ZN7dbscale7Backend10initializeEv
fun:main