本文參考自:
一、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 使用方法,參考這裡 基本的命令...