作業系統:centos8
gcc:8.3.1
asan是gcc原生的記憶體診斷工具,可以診斷記憶體越界,非法訪問,記憶體泄漏,記憶體double free等常見記憶體問題,并且效率比valgrind高好幾倍,可以克服valgrind的一些問題,比如占用記憶體高的問題,是一款比valgrind更好用的記憶體問題分析工具!
1.準備作業:
1.在編譯環境上安裝asan的開發庫
yum install libasan.x86_64
2.在運行環境上安裝asan的開發庫,如果運行環境無法聯網,可以先用yum download下來,再放到運行環境上安裝
2.編譯
CFLAGS+=-fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=address //需要與環境變數ASAN_OPTIONS=halt_on_error=0配合使用
SYSLIB+=-lasan //如果找不到庫,還需要加上-L加上庫的路徑
3.運行
export ASAN_OPTIONS=halt_on_error=0 //使行程檢測出記憶體錯誤的時候別退出
export ASAN_OPTIONS=alloc_dealloc_mismatch=0 //不檢測記憶體不匹配的情況,例如 new [] 與delete point 不匹配
asan的選項很多,可以根據需要設定ASAN_OPTIONS的選項,其他選項可以自行百度
export LD_PRELOAD=/usr/lib64/libasan.so.5.0.0 //預加載運行庫,替換系統庫libc中記憶體分配函式
LD_PRELOAD是Linux系統的一個環境變數,它可以影響程式的運行時的鏈接(Runtime linker),它允許你定義在程式運行前優先加載的元件,這個環境變數是必須的,因為libasan.so.5.0.0會替換掉libc中malloc和free函式的實作,所以需要將該庫進行預加載,
至此,所有作業完成,直接運行所需要測驗的程式即可,程式會列印出檢測出來的記憶體問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202890.html
標籤:其他
下一篇:IPV4為服務器搭代理
