Valgrind(memcheck)
valgrind通過監控進程的所有內存申請、釋放及內存邊界,能夠有效發現內存問題;
優點:
- 功能全面,內存泄露、讀寫越界;除了memcheck還包括多線程互斥等各種工具;
- 出錯后記錄日志,便于一次性做全量測試,之后再來分析日志;
缺點:
- 有一定的誤報率(和檢測算法有關)
- 因為是虛擬運行環境方式,資源消耗較大;對于大型軟件可能會降低軟件運行效率;
Address sanitizer
GCC4.8開始自帶的內存檢查工具,通過編譯選項直接在編譯階段對所有內存操作代碼增加檢查;
優點:
- 準確率100%,只要是檢查出來的一定是問題
缺點:
- 只能檢查內存(動態內存+棧)越界讀寫,無法檢查內存泄露;
- 檢測到問題時直接報錯退出,必須修復后才能繼續運行;這點對大量測試用例的批量執行不太友好,不過正是其100%的正確率,所以原則就是“檢測出的問題你沒理由不去修復”,簡單說就是逼著你去修復。