valgrind是一款用於記憶體除錯、記憶體洩漏檢測以及效能分析、檢測線程錯誤的軟體開發工具。
valgrind 是執行在linux 上的多用途**剖析和記憶體除錯軟體。主要包括memcheck、callgrind、cachegrind 等工具,每個工具都能完成一項任務除錯、檢測或分析。可以檢測記憶體洩露、執行緒違例和cache 的使用等。valgrind 基於**方式對程式進行除錯,它先於應用程式獲取實際處理器的控制權,並在實際處理器的基礎上**乙個虛擬處理器,並使應用程式執行於這個虛擬處理器之上,從而對應用程式的執行進行監視。應用程式並不知道該處理器是虛擬的還是實際的,已經編譯成二進位制**的應用程式並不用重新進行編譯,valgrind 直接解釋二進位制**使得應用程式基於它執行,從而能夠檢查記憶體操作時可能出現的錯誤。所以在valgrind下執行的程式執行速度要慢得多,而且使用的記憶體要多得多。
本文以valgrind-3.13.0.tar.bz2
版本為例,介紹valgrind在linux centos 6.9下的安裝。
to install from a tar.bz2 distribution:
1. run ./configure, with some options if you wish. the only interesting
one is the usual --prefix=/where/you/want/it/installed.
2. run "make".
3. run "make install", possibly as root if the destination permissions
require that.
4. see if it works. try "valgrind ls -l". either this works, or it
bombs out with some complaint.
以上描述摘自安裝包的readme
文件。具體安裝步驟如下:
#include
#include
intmain()
return0;
}
這是valgrind中應用最廣泛的工具,它是乙個重量級的記憶體檢查器,能夠發現開發中絕大多數記憶體錯誤使用情況。所以,它能檢測以下問題:
它主要用來檢查程式中函式呼叫過程**現的問題。
和gprof類似的分析工具,但它對程式的執行觀察更是入微,能給我們提供更多的資訊。
callgrind收集程式執行時的一些資料,建立函式呼叫關係圖,還可以有選擇地進行cache模擬。
在執行結束時,它會把分析資料寫入乙個檔案。callgrind_annotate可以把這個檔案的內容轉化成可讀的形式。
cache分析器,它主要用來檢查程式中快取使用出現的問題。
它模擬cpu中的一級快取i1,dl和二級快取,能夠精確地指出程式中cache的丟失和命中。
如果需要,它還能夠為我們提供cache丟失次數,記憶體引用次數,以及每行**,每個函式,每個模組,整個程式產生的指令數。這對優化程式有很大的幫助。
它主要用來檢查多執行緒程式**現的競爭問題。
helgrind尋找記憶體中被多個執行緒訪問,而又沒有一貫加鎖的區域,這些區域往往是執行緒之間失去同步的地方,而且會導致難以發掘的錯誤。
helgrind實現了名為「eraser」的競爭檢測演算法,並做了進一步改進,減少了報告錯誤的次數。不過,helgrind仍然處於實驗階段。
堆疊分析器,它主要用來檢查程式中堆疊使用**現的問題。
它能測量程式在堆疊中使用了多少記憶體,告訴我們堆塊,堆管理塊和棧的大小。
massif能幫助我們減少記憶體的使用,在帶有虛擬記憶體的現代系統中,它還能夠加速我們程式的執行,減少程式停留在交換區中的機率。
命令格式: valgrind options prog-and-args
命令選項
含義取值
-tool=
執行 valgrind中名為toolname的工具
上述各工具名,預設memcheck
-h 或–help
顯示幫助資訊
-version
顯示valgrind核心的版本,每個工具都有各自的版本
-q 或–quiet
安靜地執行,只列印錯誤資訊
-v –verbose
更詳細的資訊, 增加錯誤數統計
-trace-children=no或yes
跟蹤子執行緒
預設no
-track-fds=no或yes
跟蹤開啟的檔案描述
預設no
-time-stamp=no或yes
增加時間戳到log資訊
預設no
-log-fd=
輸出log到指定的檔案描述符
預設2,表示stderr
-log-file=
輸出log資訊到filename.pid檔案裡
-log-file-exactly=
輸出log資訊到 file
-log-file-qualifier=
取得環境變數的值來做為輸出資訊的檔名
預設none
-log-socket=ip:port
輸出log到socket ,其對端位址為 ip:port
-leak-check=no或summary或full
memcheck選項:要求對leak給出詳細資訊
預設summary
-leak-resolution=low或med或high
memcheck選項:how much bt merging in leak check
預設low
-show-reachable=no或yes
memcheck選項:show reachable blocks in leak check
預設no
Valgrind工具的使用
本文參考自 一 valgrind介紹 valgrind是執行在linux上一套基於 技術的程式除錯和分析工具,它的主要作者是獲得過google o reilly開源大獎的julian seward,它包含乙個核心 乙個軟體合成的cpu,和一系列的小工具,每個工具都可以完成一項任務 除錯,分析,或測試...
valgrind工具的使用,檢測記憶體洩露
valgrind是一款用於記憶體除錯 記憶體洩漏檢測以及效能分析的軟體開發工具。valgrind這個名字取自北歐神話中英靈殿的入口。valgrind的最初作者是julian seward,他於2006年由於在開發valgrind上的工作獲得了第二屆google o reilly開源 獎。valgri...
使用valgrind工具檢測記憶體洩漏
因為公司伺服器上面本身就安裝有valgrind,所以我是直接拿過來使用的,並沒有自己安裝過,需要安裝的朋友自己google安裝吧。可以使用 which valgrind 命令來看自己電腦上是否已經安裝上valgrind。useful link 3.1 valgrind 使用方法,參考這裡 基本的命令...