valgrind查内存泄漏及suppression的写法

本文详细介绍了Valgrind的内存泄漏使用方法,包括如何配置选项、编写suppression文件以及memcheck的suppression关键字。通过提供实用的指导和示例,帮助开发者有效地检测和解决内存泄漏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


valgrind的内存泄漏使用
1. valgrind [valgrind options] your-program your-program-options
2. valgrind --tool=memcheck
3. --gen-suppressions=[no,yes,all], 在结果里输出suppressions信息,可以直接copy到supp文件,这里注意,实际使用时如果参数为yes,好像每次输出都要确认,all的话就不需要确认了
4. 在编译文件时,最好能带-g,-fno-inline选项,可以带上-O优化选项,最好不要使用-O2及以上优化选项
5. -v可以打印更多信息,-v -v可以打印更详细信息
6. --log-file=filename 可使输出到文件里,--log-socket=192.168.0.1/123456 (valgrind-listener -e portnumber)
7. suppression文件的编写
         每个suppression以{}开始结束,并由以下行组成:
         第一行:这个suppression的name,valgrind以后就会以这个name代表这个suppression
         第二行:这个suppression suppress的tool及它的类型,如memcheck:value1
         第三行:如果第二行需要参数(一般系统调用的suppression需要这一行),则在这行指定
         剩余行:这个suppression的context,相当于调用栈。可以指定函数function或者share object
         1)函数格式:func:function-name,注意如果是c++,只能用mangled name,如果是手动写,可以用--demangle-no在错误信息里获取mangled name        
         2)share object: obj:objname-path-name
         3)函数名和share object名可以用*和?匹配任意字符,可以用...匹配context链路的一条
         4)一个suppression的例子:
{
   g_type_register_static
   Memcheck:Leak
   match-leak-kinds: possible
   ...
   fun:g_type_register_static
   ...
}
{
   g_type_register_fundamental
   Memcheck:Leak
   match-leak-kinds: possible
   ...
   fun:g_type_register_fundamental
   ...
}
8. memcheck的suppression关键字
    1)Value1, Value2, Value4, Value8, Value16:代表1-16字节的未初始化变量的使用
    2)Cond (or its old name, Value0):表示未初始化的cpu条件变量
    3)Addr1, Addr2, Addr4, Addr8, Addr16:表示1-16字节的不可addressable的内存访问
    4)Jump:表示跳转到一个不可addressable的地方
    5)Param:表示系统调用syscall的参数错误,这个类型需要另外一行指定syscall的那个参数
    6)Free:表示不匹配的内存释放
    7)Overlap:表示在memcpy时source和destination有重叠
    8)Leak:表示内存泄漏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值