1. 程式人生 > >C記憶體操作問題檢查工具使用

C記憶體操作問題檢查工具使用

最近除錯的C程式碼出現不知名的記憶體問題,只要涉及到記憶體申請和釋放,就會出現SIGSEGV問題。

valgrind -tool=memcheck xxx args

AddressSanitizer

-fsanitize=address -fno-omit-frame-pointer
但是在QEMU上編譯後,QEMU會退出,無法使用。

gcc 4.8以後加入這個功能,但是gcc4.9以前,列印的資訊有限,是程式碼的偏移量,需要通過
addr2line -e xxx 0xXXX打印出所在的行。編譯中需要有-g選項。

mtrace類似,需要增加標頭檔案,增加一個函式呼叫。如果是動態連結庫,需要
cat /proc/xxx/maps獲取載入的基址,再用出問題的地址減去基址,然後用addr2line獲取具體資訊。

這裡面感覺address sanitizer最好用