linux下記憶體洩露檢測工具Valgrind介紹

2021-07-25 21:33:18 字數 1955 閱讀 9920

目前在linux開發乙個分析實時路況的應用程式,在聯合測試中發現程式存在記憶體洩露的情況。

這下著急了,馬上就要上線了,還好發現了一款valgrind工具,完美的解決了記憶體洩露的問題。

推薦大家可以使用看看。

valgrind是執行在linux上一套基於**技術的程式除錯和分析工具,它的主要作者是獲得過google-o'reilly開源大獎的julian seward,它包含乙個核心──乙個軟體合成的cpu,和一系列的小工具,每個工具都可以完成一項任務──除錯,分析,或測試等。valgrind可以檢測記憶體洩漏和記憶體違例,還可以分析cache的使用等,靈活輕巧而又強大,能直穿程式錯誤的心臟,真可謂是程式設計師的瑞士軍刀。 

(一). valgrind概觀

valgrind一般包含下列工具: 

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只是為開發者展示如何建立乙個工具。我們就不做介紹了。 

2、安裝

cd valgrind

./autogen.sh

./configure --prefix=...

make

make install

(二). 使用memcheck 工具進行記憶體分析

1、編譯你的程式debug版本./testmem

2、執行:valgrind --tool=memcheck --leak-check=full --log-file=./log.txt  ./testmem

3、耐心等待並分析結果(log.txt結果檔案中會包含引起記憶體洩露的**在在原始碼中的位置,即以下舉例說明中標明為紅色的部分)

舉例說明:

下面是一段有問題的c程式**test.c

記憶體洩露檢測工具 valgrind

valgrind 安裝 2.解壓安裝包 tar jxvf valgrind 3.2.3.tar.bz2 3.解壓後生成目錄valgrind 3.2.3 4.cd valgrind 3.2.3 5.執行.autogen.sh設定環境 需要標準的autoconf工具 可選 6.configure 配置v...

Linux C記憶體洩露檢測工具

在linux下些c語言程式,最大的問題就是沒有乙個好的程式設計ide,當然想kdevelop等工具都相當的強大,但我還是習慣使用kdevelop工具,由於沒有乙個習慣的程式設計ide,記憶體檢測也就成了在linux下編寫程式的乙個大問題。是不是說沒有一種記憶體檢查工具能夠在linux使用呢,也不是,...

valgrind記憶體洩露檢測工具

一 安裝 valgrind linux環境首先進入root使用者 然後執行下面的命令 tar jxvf valgrind 3.12.0.tar.bz2 cd valgrind 3.12.0 configure make make install valgrind version 檢視valgrind...