目前業(yè)界有提供了一些工具來檢查c++的內存問題并符號化(泄漏,野指針等等),Google Sanitizer(Google基于Clang的子項目)、Valgrind。Clion也將這些工具集成了進來,如下為Mac平臺下的使用過程:
平臺:MacOS 14.0。
1、Google Sanitizer
可以實現內存泄漏檢測,內存使用錯誤等等符號化功能。由于XCode自帶的clang不包含這些功能,所以需要單獨進行編譯llvm,這里通過brew安裝llvm
- 安裝llvm
brew install llvm
xcode-select --install
brew info llvm
Next-gen compiler infrastructure
https://llvm.org/
/usr/local/Cellar/llvm/17.0.6 (7,207 files, 1.8GB)
Poured from bottle using the formulae.brew.sh API on 2023-12-08 at 11:43:07
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/l/llvm.rb
License: Apache-2.0 with LLVM-exception
備注:一定要安裝xcode-select --install,否則調用clang進行編譯時會各種找不到頭文件
- 配置Clion
添加Clion環(huán)境變量-DABS_OPEN_SANITIZER=1,將打開內存使用錯誤和符號化的功能。
如果還要開啟內存泄漏檢測同時需要在Clion中添加detect_leaks=1,如下截圖:

- 使用
1、對于內存使用錯誤,例如多次釋放、野指針、溢出等等問題,運行階段既可以檢測出來,比如有如下一段代碼,運行后可以檢測到有內存溢出的問題
int global_array[100] = {-1};
int main(int argc, char **argv) {
return global_array[argc + 100]; // global buffer overflow
}

2、對于內存泄漏,需要退出程序后可以檢測出來。以我們自己Qt項目為例,初步用了一下,發(fā)現有幾處泄漏

總體來說這個工具檢測內存問題應該可以作為參考,實際效果應該還需要看后續(xù)的具體使用和繼續(xù)深入研究
1、Valgrind
同樣也可以實現內存泄漏檢測,內存使用錯誤等等符號化功能。不過根據官網手冊,它不支持M1架構Mac。
- 安裝
xcode-select --install
brew tap LouisBrunner/valgrind
brew install --HEAD LouisBrunner/valgrind/valgrind
- Clion配置
/usr/local/bin/valgrind填入下面字段

點擊OK后 然后就可以使用該工具了。
[圖片上傳失敗...(image-94906c-1708673224246)]
目前還不支持MacOS14系統(tǒng)。不能與Google Sanitizer 同時使用
參考文檔
https://www.jetbrains.com/help/clion/google-sanitizers.html#clang-cl-configure