Linux下如何检测内存泄漏

Linux检测程序内存泄漏

1.安装valgrind:
  这是一款开源的程序内存检测工具,mtrace为内存分配函数(malloc, realloc, memalign,free)安装hook函数。这些hook函数记录内存的申请和释放的trace信息。


Valgrind详解:

Linux下如何检测内存泄漏_第1张图片

Valgrind包括以下一些工具:
  • 1.Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够给发现开发中绝大多数的内存错误使用的情况,比如:使用未初始化
  • 2.callgrind:它主要用来检查程序中函数中调用过程中出现的问题
  • 3.cachegrind:它主要用来检查程序中缓存使用出现的问题
  • 4.Helgrind:它主要用来检查多线程中出现的竞争问题
  • 5.Massif:它主要用来检查程序中堆栈使用中出现的问题
  • 6.Extension:可以使用core提供的 功能,自己编写特定的内存调试工具
2.mtrace命令


man 3 mtrace 可以在man 手册中查看该函数


Linux下如何检测内存泄漏_第2张图片

mtrace 也有对应的命令,其使用方式为:
一.将环境变量MALLOC_TRACE设置为所需输出文件的路径名


二.在需要检测的源代码中引入mcheck.h头文件
1.在分配内存之前调用mtrace(); ,一般在main函数的开头调用
2.在结束检测的地方调用muntrace(); ,一般在return之前调用
3.编译程序时需要加上-g 选项

   #include 
   #include 
   #include    
   int main()
   {
       mtrace();
       int *p = NULL;
      p =(int *)malloc(sizeof(int) * 1);
     //free(p);//未free,内存泄漏
     muntrace();
     return 0;
  }


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


结果:

Linux下如何检测内存泄漏_第3张图片


你可能感兴趣的:(LINUX)