linux開發工具 記憶體檢測 Valgrind

2021-05-23 09:44:44 字數 2606 閱讀 7882

.安裝

專案**:http://valgrind.org/

centos

完整安裝已經包含有

valgrind。

.使用

c/c++

開發其中最令人頭疼的乙個問題就是記憶體管理,有時候為了查詢乙個記憶體洩漏或者乙個記憶體訪問越界,需要要花上好幾天時間,如果有一款工具能夠幫助我們做這件事情就好了,

valgrind

正好就是這樣的一款工具。

valgrind

是一款基於模擬

linux

下的程式偵錯程式和剖析器的軟體套件,可以

執行於x86, amd64

和ppc32

架構上。

valgrind

包含乙個核心,它提供乙個虛擬的

cpu執行程式,還有一系列的工具,它們完成除錯,剖析和一些類似的任務。

valgrind

是高度模組化的,所以開發人員或者使用者可以給它新增新的工具而不會損壞己有的結構。

,它是開放原始碼和免費的。

一、介紹

valgrind

包含幾個標準的工具,它們是: 1

、memcheck

memcheck

探測程式中記憶體管理存在的問題。它檢查所有對記憶體的讀

/寫操作,並擷取所有的

malloc/new/free/delete

呼叫。因此

memcheck

工具能夠探測到以下問題: 1

)使用未初始化的記憶體 2

)讀/寫已經被釋放的記憶體 3

)讀/寫記憶體越界 4

)讀/寫不恰當的記憶體棧空間 5

)記憶體洩漏 6

)使用malloc/new/new

和free/delete/delete

不匹配。 2

、cachegrind

cachegrind

是乙個cache

剖析器。它模擬執行

cpu中的

l1, d1

和l2 cache

,因此它能很精確的指出**中的

cache

未命中。如果你需要,它可以列印出

cache

未命中的次數,記憶體引用和發生

cache

未命中的每一行**,每乙個函式,每乙個模組和整個程式的摘要。如果你要求更細緻的資訊,它可以列印出每一行機器碼的未命中次數。在

x86和

amd64

上,cachegrind

通過cpuid

自動探測機器的

cache

配置,所以在多數情況下它不再需要更多的配置資訊了。 3

、helgrind

helgrind

查詢多執行緒程式中的競爭資料。

helgrind

查詢記憶體位址,那些被多於一條執行緒訪問的記憶體位址,但是沒有使用一致的鎖就會被查出。這表示這些位址在多執行緒間訪問的時候沒有進行同步,很可能會引起很難查詢的時序問題。

二、valgrind對你的程式都做了些什麼

valgrind

被設計成非侵入式的,它直接工作於可執行檔案上,因此在檢查前不需要重新編譯、連線和修改你的程式。要檢查乙個程式很簡單,只需要執行下面的命令就可以了

valgrind --tool=tool_name program_name

比如我們要對

ls -l

命令做記憶體檢查,只需要執行下面的命令就可以了

valgrind --tool=memcheck ls -l

不管是使用哪個工具,

valgrind

在開始之前總會先取得對你的程式的控制權,從可執行關聯庫里讀取除錯資訊。然後在

valgrind

核心提供的虛擬

cpu上執行程式,

valgrind

會根據選擇的工具來處理**,該工具會向**中加入檢測**,並把這些**作為最終**返回給

valgrind

核心,最後

valgrind

核心執行這些**。

如果要檢查記憶體洩漏,只需要增加

--leak-check=yes

就可以了,命令如下

valgrind --tool=memcheck --leak-check=yes ls -l

不同工具間加入的**變化非常的大。在每個作用域的末尾,

memcheck

加入**檢查每一片記憶體的訪問和進行值計算,**大小至少增加

12倍,執行速度要比平時慢25到

50倍。

valgrind

模擬程式中的每一條指令執行,因此,檢查工具和剖析工具不僅僅是對你的應用程式,還有對共享庫,

gnu c庫,x

的客戶端庫都起作用。

Linux開發工具

linux開發工具 vim gcc gdb make git github 文字編輯器 vim 功能最強大 1 使用 三種模式 命令列模式 插入模式 底行模式 vim 空格 檔名 例如vim hello.c 此時是命令列模式 無法插入資料 需要進入插入模式 按i或者a 退出插入模式 按esc 切換到...

《Linux程式設計》 開發工具

一 多個原始檔帶來的問題 二 make命令和makefile 1 makefile的語法 1 makefile檔案由一組依賴關係和規則組成。2 make命令會會根據makefile檔案來確定目標檔案的建立順序以及正確的規則呼叫順序。2 make命令的選項和引數 1 make程式選項 i k 讓mak...

Linux開發工具 gcc

鏈結程式把所有物件檔案中的機器碼組合在一起,並解析它們之間的交叉引用。它還整合了物件模組所使用的庫函式的 這是鏈結程式的一種簡化表示,因為這裡假定在可執行模組中,模組之間的所有鏈結都是靜態建立的。實際上有些鏈結是動態的,即這些鏈結是在程式執行時建立的。鏈結就是鏈結器ld將各個目標檔案組裝在一起,解決...