Linux下如何检测内存泄漏
Linux检测程序内存泄漏
1.安装valgrind:这是一款开源的程序内存检测工具,mtrace为内存分配函数(malloc, realloc, memalign,free)安装hook函数。这些hook函数记录内存的申请和释放的trace信息。
Valgrind详解:
-
1.Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够给发现开发中绝大多数的内存错误使用的情况,比如:使用未初始化
-
2.callgrind:它主要用来检查程序中函数中调用过程中出现的问题
-
3.cachegrind:它主要用来检查程序中缓存使用出现的问题
-
4.Helgrind:它主要用来检查多线程中出现的竞争问题
-
5.Massif:它主要用来检查程序中堆栈使用中出现的问题
-
6.Extension:可以使用core提供的 功能,自己编写特定的内存调试工具
man 3 mtrace 可以在man 手册中查看该函数
一.将环境变量MALLOC_TRACE设置为所需输出文件的路径名
1.在分配内存之前调用mtrace(); ,一般在main函数的开头调用
2.在结束检测的地方调用muntrace(); ,一般在return之前调用
3.编译程序时需要加上-g 选项
#include <stdio.h> #include <malloc.h> #include <mcheck.h> int main() { mtrace(); int *p = NULL; p =(int *)malloc(sizeof(int) * 1); //free(p);//未free,内存泄漏 muntrace(); return 0; }
4.内存泄漏信息将在MALLOC_TRACE环境变量指定的文件中报告,需要使用mtrace命令将信息转换。
结果: