mtrace 检查内存泄漏

本文介绍了一种利用mtrace工具检测程序内存泄漏的方法。mtrace通过__malloc_hook机制记录内存分配调用,并借助gcc的__builtin_return_address获取调用地址,最终生成日志文件帮助定位泄漏源。文章还提供了如何编译和运行程序的具体步骤。
mtrace 可以用来检查内存泄漏。 它利用__malloc_hook机制,记录每一个内存分配的调用,在利用gcc的__builtin_return_address 获得函数的调用地址, 生成log文件。最后通过 程序中的调试信息和日志文件找出发生内存泄漏的函数。
 
记住程序编译时要带上调试信息,不然只有地址了。
 
利用LD_PRELOAD机制, 我们可以不需要修改程序就可以跟踪内存泄漏的问题。
 
mtrace.so.cpp
#include <mcheck.h>
#include
<stdlib.h>

static void init() __attribute__((constructor));
void init()
{
char * p = getenv("MALLOC_TRACE");
if (!p) {
putenv(
"MALLOC_TRACE=mtrace.log");
}
mtrace();
}
 
编译
g++ mtrace.so.cpp -fPIC -shared -ggdb -o mtrace.so   

运行
LD_PRELOAD=~/bin/mtrace.so ./your_prg

分析
mtrace ./your_prg ./mtrace.log

优点: 速度快。
缺点:只能检测泄漏问题, 而且一些不是泄漏的地方也会打印出来。  对踩内存,内存越界访问, 缓存区溢出等没有办法。

转载于:https://www.cnblogs.com/napoleon_liu/archive/2011/06/02/2067722.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值