1. 程式人生 > >CentOS下安裝Valgrind的方法

CentOS下安裝Valgrind的方法

一、Valgrind安裝
valgrind是一款用於記憶體除錯、記憶體洩漏檢測以及效能分析的軟體開發工具。
在安裝valgrind之前,要先安裝autoconf和automake。您可以使用命令autoconf --version和automake --version檢查這兩個工具是否有安裝。

(1)下載最新的安裝包

http://valgrind.org/downloads/current.html

或者是輸入命令:

wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2

(2)解壓縮安裝包,輸入命令:

tar -jxvf valgrind-3.10.1.tar.bz2

(3)進入解壓縮後生成的目錄valgrind-3.10.1,輸入命令:

cd valgrind-3.10.1

(4)執行./autogen.sh設定環境,輸入命令:

./autogen.sh

如果你碰到如下錯誤:aclocal: command not found

則表示你需要安裝autoconf和automake兩個工具,請先檢視“安裝autoconf“和”安裝automake“兩個步驟。 

(5)執行configure檔案,生成Makefile。

(6)編譯並安裝valgrind,輸入命令:

make;make install

(7)檢查安裝是否成功:

      valgrind --version

  

二、測試程式碼:
#include <stdlib.h>
int* func(void)
{
   int* x = malloc(10 * sizeof(int));
   x[10] = 0;  //問題1: 陣列下標越界
}                  
 int main(void)
{
   int* x=NULL;
   x=func();
   //free(x);  
   x=NULL;
   return 0;   //問題2: 記憶體沒有釋放
 }
編譯:g++ -g -o testdump main.cpp
Valgrind檢查:valgrind --tool=memcheck --leak-check=yes ./testdump

說明:
Invalid write of size 4:表示陣列越界寫了4位元組;
40 bytes in 1 blocks:表示因程式退出而發生記憶體洩露40位元組;

修改Bug之後再進行valgrind檢查:沒有了記憶體洩漏和陣列越界問題!


小結:
一、Valgrind 中包含的 Memcheck 工具可以檢查以下的程式錯誤:
(1)使用未初始化的記憶體 (Use of uninitialised memory)
(2)使用已經釋放了的記憶體 (Reading/writing memory after it has been free'd)
(3)使用超過malloc分配的記憶體空間(Reading/writing off the end of malloc'd blocks)
(4)對堆疊的非法訪問 (Reading/writing inappropriate areas on the stack)
(5)申請的空間是否有釋放 (Memory leaks – where pointers to malloc'd blocks are lost forever)
(6)malloc/free/new/delete申請和釋放記憶體的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
(7)src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions)
(8)重複free

二、工程經驗

對於寫好的程式碼,想要檢查是否存在記憶體問題,可以結合Coverity靜態記憶體檢查和Valgrind記憶體檢測。注意:Coverity靜態檢測不能檢測動態記憶體問題。
--------------------- 
作者:SoaringLee_fighting 
來源:CSDN 
原文:https://blog.csdn.net/soaringlee_fighting/article/details/77925402 
版權宣告:本文為博主原創文章,轉載請