Linux記憶體除錯工具 Valgrind使用方法

2021-06-08 15:48:36 字數 1539 閱讀 5223

一. valgrind是什麼?

valgrind是乙個提供程式除錯及效能分析的工具集。其包含的工具主要有memcheck,cachegrind,callgrind,massif等。其中,最為常用的是memcheck,其主要用來檢查程式heap上的記憶體使用情況。本文件主要介紹memcheck的用法和一些使用技巧。

二. valgrind能幹什麼不能幹什麼?

功能約束如下:

1.  只能檢查heap上的錯誤,不能檢查出static和stack記憶體的使用,如陣列越界等。

2.  不能指出為什麼洩漏,也不能指出在哪記憶體洩漏

3.  指出的錯誤並非100%正確,但建議在編譯時至少以warning的心態對待它們。

三. valgrind的安裝與部署

2.        用bzip2及tar命令解壓壓縮包。

3.        進入解壓目錄,執行./configure

4.        執行「make」命令

5.        執行「make install」命令

6.        執行「valgrind ls- l」測試valgrind是

已經正確安裝到計算機上。若正確安裝,則會出現類似第四部分的報錯資訊。

若沒有root許可權,則在第3步時,可以用--prefix指定安裝的目錄

./configure –prefix=/home/work/yangfenqiang/

以下步驟相同。

四. valgrind使用示例及報錯資訊說明

在leak summary中:

l  definitely lost:表明沒有任何指標指向該區域,已經造成了記憶體洩漏。

l  possibly lost:存在指標指向記憶體中的某個位置,valgrind認為你有可能是在做一些其他的高階應用(將指標放在申請的記憶體塊中間)

l  still reachable:仍有指標引用該記憶體塊,只是沒有釋放而已,可以通過設定—show-reachable=yes來報錯。

五. valgrind常用命令引數

1.        --tool=[default=memcheck]

--tool引數指明所要使用valgrind的哪乙個工具,預設的為memcheck。因為大多數情況下我們只會用到memcheck工具,因此該引數可以不寫。

2.        --leak-check=[default:summary]

在退出時檢查是否有洩漏。summary只是告訴我們有多少次洩漏,yes或full會告訴我們每次洩漏的詳細資訊。

3.        --show-reachable=[default:no]

通過設定該引數為yes,則顯示still reachable型別的記憶體洩漏資訊。

其他更多的執行引數資訊可以檢視《valgrind使用指南》及《valgrind manual》,或下面這個位址的介紹:

linux下記憶體除錯工具 valgrind

1 valgrind之memcheck 最常用的工具,用來檢測程式中出現的記憶體問題,所有對記憶體的讀寫都會被檢測到,一切對malloc free new delete的呼叫都會 獲。所以,它能檢測以下問題 1 對未初始化記憶體的使用 2 讀 寫釋放後的記憶體塊 3 讀 寫超出malloc分配的記憶...

Linux記憶體除錯工具初探 MEMWATCH

c 語言作為 linux 系統上標準的程式語言給予了我們對動態記憶體分配很大的控制權。這種自由可能會導致嚴重的記憶體管理問題,可能導致程式崩潰或隨時間的推移導致效能降級。記憶體洩漏 即malloc 內存在對應的free 呼叫執行後永不被釋放 和緩衝區溢位 例如對以前分配到某陣列的記憶體進行寫操作 是...

Linux下的記憶體除錯工具 valgrind

valgrind 工具包包含多個工具,如memcheck,cachegrind,helgrind,callgrind,massif。下面分別介紹個工具的作用 一 memcheck 工具主要檢查下面的程式錯誤 使用未初始化的記憶體 使用已經釋放了的記憶體 使用超過 malloc分配的記憶體空間 對堆疊...