189
技術社區[雲棲]
內存檢查工具
內存檢測工具主要用於檢測程序的堆棧錯誤。一般的檢測方法是通過加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