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

报错如下图所示:
在这里插入图片描述

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

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

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

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

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

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

如图:
在这里插入图片描述
然后把想忽略的错误的规则块,复制一下,新建一个valgrind.supp的文件(后缀是.supp就行,名称其实没关系),

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

在这里插入图片描述

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

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

{
<insert_a_suppression_name_here>
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的一个块(这里就不展开来讲了,照写就行)

{
<insert_a_suppression_name_here>
Memcheck:Addr4

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

}

{
<insert_a_suppression_name_here>
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值