記憶體洩漏檢測工作Valgrind簡單用法

2021-07-09 23:57:49 字數 2528 閱讀 5369

valgrind的主要作者

julian seward

剛獲得了今年的

google-o'reilly

開源大獎之一

──best tool maker

。讓我們一起來看一下他的作品。

valgrind

是執行在

linux

上一套基於**技術的程式除錯和分析工具,它包含乙個核心

──乙個軟體合成的

cpu,和一系列的小工具,每個工具都可以完成一項任務

──除錯,分析,或測試等。

valgrind

可以檢測記憶體洩漏和記憶體違例,還可以分析

cache

的使用等,靈活輕巧而又強大,能直穿程式錯誤的心臟,真可謂是程式設計師的瑞士軍刀。 

valgrind

的最新版是

3.2.0

,它一般包含下列工具: 

1.memcheck

最常用的工具,用來檢測程式中出現的記憶體問題,所有對記憶體的讀寫都會被檢測到,一切對

malloc()/free()/new/delete

的呼叫都會**獲。所以,它能檢測以下問題: 

1.對未初始化記憶體的使用; 2.讀

/寫釋放後的記憶體塊; 3.讀

/寫超出

malloc

分配的記憶體塊; 4.讀

/寫不適當的棧中記憶體塊; 

5.記憶體洩漏,指向一塊記憶體的指標永遠丟失; 

6.不正確的

malloc/free

或new/delete

匹配; 

7,memcpy()

相關函式中的

dst和

src指標重疊。 

這些問題往往是

c/c++

程式設計師最頭疼的問題,

memcheck

在這裡幫上了大忙。 

2.callgrind

和gprof

類似的分析工具,但它對程式的執行觀察更是入微,能給我們提供更多的資訊。和

gprof

callgrind

收集程式執行時的一些資料,建立函式呼叫關係圖,還可以有選擇地進行

cache

模擬。在執行結束時,它會把分析資料寫入乙個檔案。

callgrind_annotate

可以把這個檔案的內容轉化成可讀的形式。 

3.cachegrind

cache

分析器,它模擬

cpu中的一級快取i1,

dl和二級快取,能夠精確地指出程式中

cache

的丟失和命中。如果需要,它還能夠為我們提供

cache

丟失次數,記憶體引用次數,以及每行**,每個函式,每個模組,整個程式產生的指令數。這對優化程式有很大的幫助。 

4.helgrind

它主要用來檢查多執行緒程式中出現的競爭問題。

helgrind

尋找記憶體中被多個執行緒訪問,而又沒有一貫加鎖的區域,這些區域往往是執行緒之間失去同步的地方,而且會導致難以發掘的錯誤。

helgrind

實現了名為

「eraser」

的競爭檢測演算法,並做了進一步改進,減少了報告錯誤的次數。不過,

helgrind

仍然處於實驗階段。 

5. massif

堆疊分析器,它能測量程式在堆疊中使用了多少記憶體,告訴我們堆塊,堆管理塊和棧的大小。

massif

能幫助我們減少記憶體的使用,在帶有虛擬記憶體的現代系統中,它還能夠加速我們程式的執行,減少程式停留在交換區中的機率。 

此外,lackey

和nulgrind

也會提供。

lackey

是小型工具,很少用到;

nulgrind

只是為開發者展示如何建立乙個工具。我們就不做介紹了。 

valgrind

的使用非常簡單,

valgrind

命令的格式如下: 

valgrind [valgrind-options] your-prog [your-prog options] 

一些常用的選項如下: 

選項 作用 

-h --help 

顯示幫助資訊。 

--version 

顯示valgrind

核心的版本,每個工具都有各自的版本。 

-q --quiet 

安靜地執行,只列印錯誤資訊。 

-v --verbose 

列印更詳細的資訊。 

--tool= [default: memcheck] 

最常用的選項。執行

valgrind

中名為toolname

的工具。如果省略工具名,預設執行

memcheck

。 --db-attach= [default: no] 

繫結到偵錯程式上,便於除錯錯誤。 

Linux記憶體洩漏檢查工具 valgrind

valgrind工具功能很多,可以動態檢測程式執行時的問題,其中一項就是檢測記憶體洩漏。使用方法 valgrind options prog and args 用例 問題程式 memleak.c include include main int argc,char argv 執行程式 valgrin...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般 最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的 reboot才會...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的reboot才會正常...