3.2.5 c/c++内存泄漏检测

方案1

因为malloc是weak symbol,用户可以直接定义一个自己的版本覆盖glibc的
采用__libc_malloc和__libc_free这两个别名调用原先的版本
用__builtin_return_address得到调用mallloc的地址(注意这个函数只有参数为0时可以保证不seg fault)
在每次malloc时以分配的地址为名生成一个文件
free时再删除

addr2line -f -e memleak -a 0x4006f7

得到具体的行号(编译时需要加-g)

方案2

使用宏定义替换
这个我以前也玩过,就不细说了
https://github.com/jsc723/memCheck/blob/master/memCheck.c
这个方法有个缺点就是每次开关检测时都要重新编译整个项目,所以不适合太大的项目(几十万行的那种)

方案3

使用malloc_hook
多线程表现不佳,已经被标注为过时

我的方案

https://github.com/itaych/MEM_debug
原理基于方案1
https://stackoverflow.com/questions/17803456/an-alternative-for-the-deprecated-malloc-hook-functionality-of-glibc
预先编译成动态库后,在运行时只要link一下就能自动加载泄漏检测组件(意味着不需要重新编译代码),还可以检测多次free,写入超出边界等错误

参考

  1. 零声教育c/c++ linux 3.2.5
  2. https://github.com/itaych/MEM_debug
  3. https://stackoverflow.com/questions/17803456/an-alternative-for-the-deprecated-malloc-hook-functionality-of-glibc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值