mtrace 检查内存泄漏

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

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

你可能感兴趣的:(内存泄漏)