Reference:
http://valgrind.org/docs/manual/mc-manual.html : valgrind command line usage
https://wiki.wxwidgets.org/Valgrind_Suppression_File_Howto : 如何写一个suppression file
命令解析
<span style="font-size:18px;">valgrind --memcheck:leak-check=full --gen-suppressions=all --suppressions=qt.supp --suppressions=extern.supp --show-leak-kinds=definite,possible --errors-for-leak-kinds=definite,possible --log-file=gui-qt.log ./my_exec
</span>
这里 --gen--suppressions=all 每一个error后面都会跟随一个suppression, 用来过滤掉这个error.
--suppressions=qt.supp 用来过滤掉qt库中的memory 错误.
--suppressions=extern.supp 用来过滤掉 其他一些库中的memory错误 (我们只关心自己的代码是否有内存泄露等问题)
--show-leak-kinds=definite,possible --errors-for-leak-kinds=definite,possible 只显示definite和possible的内存错误.
--log-file=gui-qt.log 错误信息输出到gui-qt.log
Suppression file
{
<name>
Memcheck:Leak
...
obj:xx*.so
fun:gdk_set_locale
}
Memcheck 屏蔽的错误种类包括:Cond, Addr8, Value8, and Leak
"..." 通配符任意库或函数
obj:需要屏蔽的库
fun:需要屏蔽的函数
example中的suppression,表示屏蔽掉xx*.so中gdk_set_locale的memory Leak错误.注意fun和obj的冒号后不能有空格.
我的qt.supp:
{
<QtCore>
Memcheck:Leak
...
obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6
}
{
<QtCore>
Memcheck:Addr4
...
obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6
}
{
<QtCore>
Memcheck:Addr8
...
obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6
}
{
<QtCore>
Memcheck:Free
...
obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6
}
{
<QtGui>
Memcheck:Leak
...
obj:/usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.6
}
{
<QtGui>
Memcheck:Addr4
...
obj:/usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.6
}
{
<QtGui>
Memcheck:Addr8
...
obj:/usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.6
}
{
<QtGui>
Memcheck:Free
...
obj:/usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.6
}