Valgrind的使用方法

來源:互聯網
上載者:User

標籤:style   color   io   os   使用   ar   for   strong   檔案   

        Valgrind是運行在Linux上一套基於模擬技術的程式調試和分析工具,它包含一個核心──一個軟體合成的CPU,和一系列的小工具,每個工具都可以完成一項任務──調試,分析,或測試等。Valgrind可以檢測記憶體流失和記憶體違例,還可以分析cache的使用等,靈活輕巧而又強大,能直穿程式錯誤的心臟,真可謂是程式員的瑞士軍刀。 

一、Valgrind的主要功能
  Valgrind工具包包含多個工具,如Memcheck,Cachegrind,Helgrind,Callgrind,Massif。下面分別介紹個工具的作用:

Memcheck 工具主要檢查下面的程式錯誤:

  1.使用未初始化的記憶體 (Use of uninitialised memory)
  2.使用已經釋放了的記憶體 (Reading/writingmemory after it has been free’d)
  3.使用超過 malloc分配的記憶體空間(Reading/writing off the end of malloc’d blocks)
  4.對堆棧的非法訪問 (Reading/writinginappropriate 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)
Callgrind
  Callgrind收集程式運行時的一些資料,函數調用關係等資訊,還可以有選擇地進行cache類比。在運行結束時,它會把分析資料寫入一個檔案。callgrind_annotate可以把這個檔案的內容轉化成可讀的形式。

Cachegrind
        它類比 CPU中的一級緩衝I1,D1和L2二級緩衝,能夠精確地指出程式中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數,記憶體引用次數,以及每行代碼,每個函數,每個模組,整個程式產生的指令數。這對最佳化程式有很大的協助。

Helgrind
  它主要用來檢查多線程程式中出現的競爭問題。Helgrind 尋找記憶體中被多個線程訪問,而又沒有一貫加鎖的地區,這些地區往往是線程之間失去同步的地方,而且會導致難以發掘的錯誤。Helgrind實現了名為” Eraser” 的競爭檢測演算法,並做了進一步改進,減少了報告錯誤的次數。

Massif
  堆棧分析器,它能測配量序在堆棧中使用了多少記憶體,告訴我們堆塊,堆管理塊和棧的大小。Massif能協助我們減少記憶體的使用,在帶有虛擬記憶體的現代系統中,它還能夠加速我們程式的運行,減少程式停留在交換區中的幾率

二. 使用Valgrind 

Valgrind的使用非常簡單,valgrind命令的格式如下: 

valgrind [valgrind-options]your-prog [your-prog options] 

一些常用的選項如下: 

-h --help 

顯示協助資訊。 

--version 

顯示valgrind核心的版本,每個工具都有各自的版本。 

-q --quiet 

安靜地運行,只列印錯誤資訊。 

-v --verbose 

列印更詳細的資訊。 

--tool= [default: memcheck] 

最常用的選項。運行valgrind中名為toolname的工具。如果省略工具名,預設運行memcheck。 

--db-attach= [default: no] 

綁定到調試器上,便於調試錯誤。 

我們通過例子看一下它的具體使用。我們構造一個存在記憶體流失的C程式,如下: 

#include <stdio.h>

#include <stdlib.h>

 

int*Test(void)

{

    int* x = malloc(10 * sizeof(int));

    delete x;// problem 1: heap block overrun, problem 2: memory leak --x not free, only first address

 

    return x;

}

int main(void)

{

    int count;

    Test();

    printf("i =%d/n",count); //problem 3: use uninitialised value.

 

    return 0;

}

$ gcc -Wall -o Test Test.c 

$ valgrind --tool=memcheck ./ Test

$valgrind --tool=memcheck --leak-check=yes ./Test

三、安裝

$:sudo apt-get install valgrind

Valgrind的使用方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.