Valgrind工具的使用

2021-07-24 15:45:31 字數 1657 閱讀 9008

本文參考自:

一、valgrind介紹:

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

包含的工具:

memcheck。這是valgrind應用最廣泛的工具,乙個重量級的記憶體檢查器,能夠發現開發中絕大多數記憶體錯誤使用情況,比如:使用未初始化的記憶體,使用已經釋放了的記憶體,記憶體訪問越界等。這也是本文將重點介紹的部分。

callgrind。它主要用來檢查程式中函式呼叫過程中出現的問題。

cachegrind。它主要用來檢查程式中快取使用出現的問題。

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

massif。它主要用來檢查程式中堆疊使用中出現的問題。

extension。可以利用core提供的功能,自己編寫特定的記憶體除錯工具。

這裡主要介紹 memcheck的使用。

2、安裝

1)centos yum 直接安裝

sudo yum install valgrind

2)原始碼包安裝

先解壓:

bzip2 -d ***.tar.bz2

tar -xvf ***.tar 

安裝: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結果檔案中會包含引起記憶體洩露的**在在原始碼中的位置,即以下舉例說明中標明為紅色的部分

4、舉例說明:

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

#include

void f(void)

//問題2: 記憶體沒有釋放

int main(void)

1) 編譯程式test.c

gcc -wall test.c -g -o test

2) 使用valgrind檢查程式bug

valgrind --tool=memcheck --leak-check=full ./test

/*記憶體使用總結*/

==3908== leak summary:

==3908== definitely lost: 40 bytes in 1 blocks.

==3908== possibly lost: 0 bytes in 0 blocks.

==3908== still reachable: 0 bytes in 0 blocks.

==3908== suppressed: 0 bytes in 0 blocks

valgrind工具的使用

valgrind是一款用於記憶體除錯 記憶體洩漏檢測以及效能分析 檢測線程錯誤的軟體開發工具。valgrind 是執行在linux 上的多用途 剖析和記憶體除錯軟體。主要包括memcheck callgrind cachegrind 等工具,每個工具都能完成一項任務除錯 檢測或分析。可以檢測記憶體洩...

valgrind工具的使用,檢測記憶體洩露

valgrind是一款用於記憶體除錯 記憶體洩漏檢測以及效能分析的軟體開發工具。valgrind這個名字取自北歐神話中英靈殿的入口。valgrind的最初作者是julian seward,他於2006年由於在開發valgrind上的工作獲得了第二屆google o reilly開源 獎。valgri...

使用valgrind工具檢測記憶體洩漏

因為公司伺服器上面本身就安裝有valgrind,所以我是直接拿過來使用的,並沒有自己安裝過,需要安裝的朋友自己google安裝吧。可以使用 which valgrind 命令來看自己電腦上是否已經安裝上valgrind。useful link 3.1 valgrind 使用方法,參考這裡 基本的命令...