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

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

相关文章:

  • 2022-01-03
  • 2022-12-23
  • 2021-07-25
  • 2021-11-16
  • 2021-08-26
  • 2022-12-23
  • 2021-11-30
  • 2022-12-23
猜你喜欢
  • 2021-08-16
  • 2022-12-23
  • 2022-12-23
  • 2021-06-21
  • 2021-09-23
  • 2022-12-23
  • 2021-04-20
相关资源
相似解决方案