本文最后更新于:2020年7月2日 晚上

* 这篇来学习一下Linux中的一个命令——mtrace,它是怎么用的呢?一起来看看。。。→_→ *

内存泄漏代码

#include <stdio.h>

int main()
{
	int *p = NULL;
	p = (int *)malloc(sizeof(int) * 1);
	
	//free(p);
	return 0;
}

这代码太简单了。。。不解释。。

mtrace命令的使用

  • 将环境变量MALLOC_TRACE设置为所需输出文件的路径名
    mtrace设置环境变量

  • 在源代码中引入mcheck.h头文件

#include <mcheck.h>
  • 在分配内存之前调用mtrace(); ,一般在main函数的开头调用

  • 在结束检测的地方调用muntrace(); ,一般在return之前调用

  • 编译程序时需要加上-g 选项,
    mtrace源代码编译

  • 内存泄漏信息将在MALLOC_TRACE环境变量指定的文件中报告,需要使用mtrace命令将信息转换

//mtrace <exec_file_name> <malloc_trace_filename>
mtrace text meminfo.txt
Memory not freed:
-----------------
   Address     Size     Caller
0x08049910      0x4  at /home/Zhang/Desktop/Linux/20170830/test.c:10

源代码

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 #include <mcheck.h>
 4 
 5 int main()
 6 {
 7     mtrace();
 8     int *p = NULL;
 9 
10     p = (int *)malloc(sizeof(int) * 1);
11 
12     //free(p);
13 
14     muntrace();
15     return 0;
16 }

* 是不是很简单。。。嗯。。。→_→ *