mtrace 简介

内存泄露问题一般会再长时间运行的程序中暴露出来。而且一般很难定位和查找。

linux 提供mtrace/muntrace来检测程序是否有内存泄露。一般来说要检测哪一段代码是否有内存泄露,就可以用这一对函数包起来。

mtrace每一对malloc-free的执行,若每一个malloc都有相应的free,则代表没有内存泄露,对于任何非malloc/free情況下所发生的内存泄露问题,mtrace并不能找出来。

在使用mtrace之前,先要设置一个环境变量“MALLOC_TRACE”来指定mtrace检测结果的生成文件名。通过此文件就可以看出代码是否有内存泄露。

MALLOC_TRACE可以用export MALLOC_TRACE=xxx来设置,也可以通过setenv设置。

下面写个简单的sample来看看mtrace是怎样使用的:

#include <mcheck.h>
#include <stdlib.h>

void main(void)
{
  setenv("MALLOC_TRACE", "/mnt/hgfs/share/test/mtrace_output", 1);
  mtrace();
  int *p1 = (int*)malloc(sizeof(int));
  int *p2 = (int*)malloc(sizeof(int));
  free(p1);
  muntrace();
  return;
}

gcc -g test_mtrace.c -o test_mtrace

运行test_mtrace,就会生成指定文件mtrace_output.此文件是一个txt类型。

查看mtrace结果的方法:mtrace [binary] output_file_name。就会将output_file_name的內容转化成能被理解的语句。

 另外一种定位mem leak方法:

https://blog.csdn.net/lbo4031/article/details/51592476

https://blog.csdn.net/hanyin7/article/details/38377743

原文地址:https://www.cnblogs.com/fellow1988/p/6184754.html