内存检查工具

内存检测工具主要用于检测程序的堆栈错误。一般的检测方法是通过加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

http://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

需要安装http://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:

这个资料比较多。