内存检查工具
内存检测工具主要用于检测程序的堆栈错误。一般的检测方法是通过加magic number来表示正确的内存信息。如果magic number被写坏,那么就表示内存错乱了。
1编译选项:
-fstack-protector & -fstack-protector-all
-fstack-protector
在函数的stack上加一个magic number,如果buffer overflows的话,程序直接退出。
函数开始时加入,退出时检测。
*** stack smashing detected ***: ./test terminated
2环境变量
MALLOC_CHECK_检测堆错误。
若将MALLOC_CHECK_设置为0,则在检查到错误时不作任何提示。
若将MALLOC_CHECK_设置为1,则在检查到错误时打印一条信息到标准错误输出。
若将MALLOC_CHECK_设置为2,则在检查到错误时直接调用abort()中止程序。
3 lib :mcheck
在编译时链接 –lmcheck, 会起到和上诉边境变量相同的效果,不过,mcheck这个lib是线程不安全的。
如果出错,程序直接退出,并打印出:memory clobbered before allocated block
3: mudflap
https://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging
使用方法:
1:添加编译选项:-fmudflap
2:添加lib: -lmudflap
3:环境变量export MUDFLAP_OPTIONS=’<options>
检查非常严格,任何读写越界都会报错。’
4:mtrace:用于查看内存泄露
使用方法:
1.设置环境变量 MALLOC_TRACE指定程序输出log文件
2.包含mcheck.h文件
3.程序开始时调用 mtrace()
4.运行程序
5.使用mtrace查看log文件
5:dmalloc
需要安装https://dmalloc.com/releases/dmalloc-5.5.2.tgz
使用方法:
1:设置环境变量:
在terminal输入export DMALLOC_OPTIONS=log=logfile, debug=0×3(in Bash)/export
2:在源文件中添加下面的C代码:
#include “dmalloc.h”
值得注意的是:要在每一个.C文件里面添加,而且必须添加在所包含的头文件最后一行!
3编译选项:-DDMALLOC -DDMALLOC_FUNC_CHECK
4:lib:-ldmalloc
6 memwatch:
用于检测内存泄露
memwatch不需要安装,只要下载包解压即可,有用的文件只有memwatch.c&memwatch.h,把这两个文件放入要检测的程序的文件夹中即可。编译的命令为:gcc -DMEMWATCH -DMW_STDIO test.c memwatch.c -o test
7:valgrind:
这个资料比较多。
最后更新:2017-04-03 16:48:56