memleax不需要单独编译程序,直接运行你的程序,使用memleax命令检测进程id
1、首先运行你的程序
2、/usr/bin/memleax -e 60 62240 62240为被检测的进程id, 60表示检测60s未释放的内存
会直接打印,长期未释放内存,建议启动自己测程序,先完成所有初始化 *** 作后,再使用memleax检测。
主要观测 free=0的,因为如果不是0,可能还是会释放的
缺点:只适合检测比较小的程序,计算量太大的程序会变慢,可能导致功能不正常。
Address sanitizer是google开发的用于检测内存泄露的工具。主要检测use-after-free, 和 memory leaks。sanitizer需要在编译的时候对可能泄露的内存进行标记,所有编译的时候需要带着sanitizer一起编译,高版本的gcc已经集成了sanitizer(gcc大于4.8)。 sanitizer的官网位置可以在github中检索到。
-g 是告诉编译器编译时把符号表等调试信息编译进来
-fsanitize=address 编译标志是告诉编译器编译时调用address sanitizer
-static-libasan 标志是告诉连接器,把address sanitizer库链接进来。
所以使用的时候,如果你的编译分两个命令,注意编译的时候要加 -g -fsanitize 标志。 然后链接的时候要加 -fsanitize -static-libasan 标志。举例如下:
当然编译命令也可以一步到位如下
gcc main.c -o main -fsanitize=address -static-libasan -g
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)