學會用Clang來進行記憶體洩露分析

2022-05-06 18:48:07 字數 929 閱讀 3331

最近專案出現了記憶體洩露的問題,對於pc x86平台來說,一點點的記憶體洩露往往不會出錯,很難進行debug除錯。這個時候我們可以用到蘋果給我們帶來的神器--clang編譯器來進行記憶體洩露分析檢測,開關開啟之後,生成出來的二進位制檔案對記憶體洩露的敏感程度非常高,只要有記憶體洩露基本就會立馬停止並進行報錯。

由於專案是用cmake進行組織,因此使用cmake的方法來進行開關的開啟,首先要讓cc和cxx都變成clang和clang++(注意:在clang下有時候會對inline函式報錯,需要將inline去掉)。在build目錄中輸入

cc="

clang

" cxx="

clang++

" cmake ../ -dcmake_cxx_flags="-fsanitize=address" -dcmake_build_type=debug

其中的-dcmake_cxx_flags="-fsanitize=address"就是開啟這項記憶體洩露的檢查開關(對於cmake來說,命令列的賦值對於cmake_cxx_flags來說是真的在處理指令碼之前做為保留,也就是說在進入cmakelists.txt進行處理裡面的flags的時候,此時你的cmake_cxx_flags已經包含了-fsanitize=address了,你只需要在後期指令碼的處理過程中注意每當set falgs的時候要set(cmake_cxx_flags "$ $"),維護好指令碼中flags的追加過程就沒有問題了),然後對專案進行編譯,之後編譯出來的檔案你就可以正常執行,執行程式之後,它會去呼叫你path下clang資料夾bin中的llvm-symbolizer進行符號讀取,一有記憶體洩露它就會停止報錯。然後傳給終端的資訊裡面詳細介紹了在記憶體的申請是在哪個執行緒哪個函式開始的,記憶體的刪除是在哪個執行緒哪個函式進行的,記憶體最後的讀取(即野指標的重複濫用最終導致記憶體洩露)是在哪個執行緒哪個函式進行的,這對於多執行緒的開發自然又是如虎添翼,希望你會和我一樣喜歡這款工具。

學會用Clang來進行記憶體洩露分析

最近專案出現了記憶體洩露的問題,對於pc x86平台來說,一點點的記憶體洩露往往不會出錯,很難進行debug除錯。這個時候我們可以用到蘋果給我們帶來的神器 clang編譯器來進行記憶體洩露分析檢測,開關開啟之後,生成出來的二進位制檔案對記憶體洩露的敏感程度非常高,只要有記憶體洩露基本就會立馬停止並進...

學會用Git 分支

依據git使用手冊 第三節關於分支的內容,使用如下 新建new分支的檔案與master分支的檔案操作有如下3中關係 master分支下修改了master分支下的文件 new分支下修改了new分支下的文件 master分支和new分支下共同修改了同乙個文件 將new分支合併到master分支的結果為 ...

學會用GOOGLE做research

google是我們這個時代最偉大的產品之一。有了google,本質上誰都有能力做 research 研究 research 在今天已經不再像許多年前那樣是少數 精英 的專利了。我常常告訴我的學生,research 其實一點都不神秘 所謂的 research 其實只不過是 search,search,...