内存泄漏检查:
Linux检测程序内存泄漏
1.安装valgrind:
Valgrind是一款用于内存调试、内存泄漏检测以及性能分析、检测线程错误的软件开发工具。mtrace为内存分配函数(malloc, realloc, memalign,free)安装hook函数。这些hook函数记录内存的申请和释放的trace信息。
Valgrind详解:
Valgrind包括以下一些工具:
1.Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够给发现开发中绝大多数的内存错误使用的情况,比如:使用未初始化
2.callgrind:它主要用来检查程序中函数中调用过程中出现的问题
3.cachegrind:它主要用来检查程序中缓存使用出现的问题
4.Helgrind:它主要用来检查多线程中出现的竞争问题
5.Massif:它主要用来检查程序中堆栈使用中出现的问题
6.Extension:可以使用core提供的 功能,自己编写特定的内存调试工具
2.mtrace命令
man 3 mtrace 可以在man 手册中查看该函数
mtrace 也有对应的命令,其使用方式为:
一.将环境变量MALLOC_TRACE设置为所需输出文件的路径名
二.在需要检测的源代码中引入mcheck.h头文件
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;
}
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./test_permission_manager
valgrind --leak-check=yes检查bufr编解码程序运行时提示still reachable: 568 bytes in 1 blocks,