基于Clion的c++內存使用監(jiān)測工具

目前業(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,如下截圖:

image.png
  • 使用

1、對于內存使用錯誤,例如多次釋放、野指針、溢出等等問題,運行階段既可以檢測出來,比如有如下一段代碼,運行后可以檢測到有內存溢出的問題

int global_array[100] = {-1};

int main(int argc, char **argv) {
    return global_array[argc + 100];  // global buffer overflow
}
image.png

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

image.png

總體來說這個工具檢測內存問題應該可以作為參考,實際效果應該還需要看后續(xù)的具體使用和繼續(xù)深入研究

1、Valgrind

同樣也可以實現內存泄漏檢測,內存使用錯誤等等符號化功能。不過根據官網手冊,它不支持M1架構Mac。

  • 安裝
xcode-select --install
brew tap LouisBrunner/valgrind
brew install --HEAD LouisBrunner/valgrind/valgrind

  • Clion配置

/usr/local/bin/valgrind填入下面字段

image.png

點擊OK后 然后就可以使用該工具了。

[圖片上傳失敗...(image-94906c-1708673224246)]

目前還不支持MacOS14系統(tǒng)。不能與Google Sanitizer 同時使用

參考文檔

https://www.jetbrains.com/help/clion/google-sanitizers.html#clang-cl-configure

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容