linux valgrind Memcheck--内存检查工具

linux valgrind Memcheck–内存检查工具

使用方法:
注意,这里要用debug版本,如果是release的运行文件,则用debug编译出来的可执行文件替换

输出到终端:

valgrind --tool=memcheck --leak-check=full ./test.out

输出到文件:

 valgrind --tool=memcheck --leak-check=full  --log-file=test.log  ./test.out

报错如下图所示:
linux valgrind Memcheck--内存检查工具_第1张图片

这里显示的是报错时候的函数调用堆栈,默认显示12层,所以这里的最底层的函数并不一定是你的调用函数,而可能是由于限制显示不出来而已,

可以有参数指定可显示的堆栈层数,自行百度

忽略指定错误(例如第三方库的报错)
比如glibc就会报一堆的错误,然而我们并不关心,所以我们可以选择忽略这个错误,

1、先加 --gen-suppressions=all 参数运行一遍 ,

valgrind  --tool=memcheck   --gen-suppressions=all --log-file=test.log  ./test.out

在日志文件test.log 中就会看到每一个报错上面都会紧接着一个规则块,这个规则块用于忽略这个错误,

如图:
linux valgrind Memcheck--内存检查工具_第2张图片
然后把想忽略的错误的规则块,复制一下,新建一个valgrind.supp的文件(后缀是.supp就行,名称其实没关系),

把复制的规则块拷贝进去,规则块可以有多个,如下:

linux valgrind Memcheck--内存检查工具_第3张图片

2、当然这里显示的很详细,这个块里有动态库的信息,有函数的信息,这个块我们可以做一个扩展,

比如我想屏蔽这个函数的所有错误,如下, 我想renderScene 这个函数相关的所有报错,就在它下面加上三个点 (…)

{

Memcheck:Addr4
obj:/usr/lib/x86_64-linux-gnu/dri/i965_dri.so
obj:/usr/lib/x86_64-linux-gnu/dri/i965_dri.so
obj:/usr/lib/x86_64-linux-gnu/dri/i965_dri.so
fun:_ZN16QSGBatchRenderer8Renderer17renderMergedBatchEPKNS_5BatchE
fun:_ZN16QSGBatchRenderer8Renderer13renderBatchesEv
fun:_ZN16QSGBatchRenderer8Renderer6renderEv
fun:_ZN11QSGRenderer11renderSceneERK11QSGBindable
fun:_ZN11QSGRenderer11renderSceneEj

}

3、屏蔽整个动态库的所有报错, 在这个库的前后都加三个点,一般还需要加上addr8的一个块(这里就不展开来讲了,照写就行)

{

Memcheck:Addr4

obj:/usr/lib/x86_64-linux-gnu/dri/i965_dri.so

}

{

Memcheck:Addr8

obj:/usr/lib/x86_64-linux-gnu/dri/i965_dri.so

}

4、使用.supp文件运行valgrind,忽略指定错误

valgrind  --tool=memcheck --suppressions=valgrind.supp    --log-file=test.log  ./test.out

你可能感兴趣的:(valgrind,相关,linux相关)