一. valgrind是什麼?
valgrind是乙個提供程式除錯及效能分析的工具集。其包含的工具主要有memcheck,cachegrind,callgrind,massif等。其中,最為常用的是memcheck,其主要用來檢查程式heap上的記憶體使用情況。本文件主要介紹memcheck的用法和一些使用技巧。
二. valgrind能幹什麼不能幹什麼?
其功能約束如下:
1. 只能檢查heap上的錯誤,不能檢查出static和stack記憶體的使用,如陣列越界等。
2. 不能指出為什麼洩漏,也不能指出在哪記憶體洩漏
3. 指出的錯誤並非100%正確,但建議在編譯時至少以warning的心態對待它們。
三. valgrind的安裝與部署
2. 用bzip2及tar命令解壓壓縮包。
3. 進入解壓目錄,執行./configure
4. 執行「make」命令
5. 執行「make install」命令
6. 執行「valgrind ls- l」測試valgrind是
已經正確安裝到計算機上。若正確安裝,則會出現類似第四部分的報錯資訊。
若沒有root許可權,則在第3步時,可以用--prefix指定安裝的目錄
./configure –prefix=/home/work/yangfenqiang/
以下步驟相同。
四. valgrind使用示例及報錯資訊說明
在leak summary中:
l definitely lost:表明沒有任何指標指向該區域,已經造成了記憶體洩漏。
l possibly lost:存在指標指向記憶體中的某個位置,valgrind認為你有可能是在做一些其他的高階應用(將指標放在申請的記憶體塊中間)
l still reachable:仍有指標引用該記憶體塊,只是沒有釋放而已,可以通過設定—show-reachable=yes來報錯。
五. valgrind常用命令引數
1. --tool=[default=memcheck]
--tool引數指明所要使用valgrind的哪乙個工具,預設的為memcheck。因為大多數情況下我們只會用到memcheck工具,因此該引數可以不寫。
2. --leak-check=[default:summary]
在退出時檢查是否有洩漏。summary只是告訴我們有多少次洩漏,yes或full會告訴我們每次洩漏的詳細資訊。
3. --show-reachable=[default:no]
通過設定該引數為yes,則顯示still reachable型別的記憶體洩漏資訊。
其他更多的執行引數資訊可以檢視《valgrind使用指南》及《valgrind manual》,或下面這個位址的介紹:
linux下記憶體除錯工具 valgrind
1 valgrind之memcheck 最常用的工具,用來檢測程式中出現的記憶體問題,所有對記憶體的讀寫都會被檢測到,一切對malloc free new delete的呼叫都會 獲。所以,它能檢測以下問題 1 對未初始化記憶體的使用 2 讀 寫釋放後的記憶體塊 3 讀 寫超出malloc分配的記憶...
Linux記憶體除錯工具初探 MEMWATCH
c 語言作為 linux 系統上標準的程式語言給予了我們對動態記憶體分配很大的控制權。這種自由可能會導致嚴重的記憶體管理問題,可能導致程式崩潰或隨時間的推移導致效能降級。記憶體洩漏 即malloc 內存在對應的free 呼叫執行後永不被釋放 和緩衝區溢位 例如對以前分配到某陣列的記憶體進行寫操作 是...
Linux下的記憶體除錯工具 valgrind
valgrind 工具包包含多個工具,如memcheck,cachegrind,helgrind,callgrind,massif。下面分別介紹個工具的作用 一 memcheck 工具主要檢查下面的程式錯誤 使用未初始化的記憶體 使用已經釋放了的記憶體 使用超過 malloc分配的記憶體空間 對堆疊...