valgrind工具的使用

2021-10-06 15:29:49 字數 2903 閱讀 1696

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 使用方法,參考這裡 基本的命令...