閱讀189 返回首頁    go 技術社區[雲棲]


內存檢查工具

內存檢測工具主要用於檢測程序的堆棧錯誤。一般的檢測方法是通過加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

  上一篇:go 禁用WebDAV-tomcat
  下一篇:go HNOI 2002 營業額統計 Splay解法