Valgrind工具使用

Valgrind附帶了一組工具,例如著名的memcheck工具。它執行某種調試、代碼分析或類似的任務,幫助您改進程序。Valgrind體系結構是模塊化的,因此可以輕鬆地創建新工具,而不影響現有結構。

一系列有名的工具如下所示:

1.Memcheck是一個內存錯誤探測器,它幫助你的C C++程序更加正確,性能更加出色;

2.Cachegrind是高速緩存和分支預測分析器。它幫助你使程序運行得更快;

3.Callgrind是一個叫圖生成緩存分析器。它和Cachegrind功能有一些重疊,也收集了一些Cachegrind不能收集到的信息。

4.Helgrind是一個線程錯誤檢測器。它幫助您使多線程程序更正確。

5.DRD Helgrind類似也是線程錯誤檢測器,但是DRD用的是不同的分析技術,因此可能發現不同的問題。

6.Massif是一個堆分析器,它能夠幫助你用更少的內存。

7.DHAT是一種不同類型的堆分析器。 它可以幫助您瞭解塊壽命,塊利用率和佈局低效問題。

8.SGcheck是一個可以檢測堆棧和全局數組溢出的實驗工具。 它的功能與Memcheck的功能是互補的:SGcheck發現了Memcheck無法解決的問題,反之亦然。

9.BBV是一個實驗性的SimPoint基本塊矢量生成器。 計算機體系結構的人常用它來做研究和開發。

下面看一個小例子,參照valgrind手冊的例子程序。

#include <stdio.h>
#include <string.h>

void func( void )
{
   int *x  = malloc( 10 * sizeof(int ) );
   x[10] = 0;
}
int main( int argc, char **argv )
{
   func();
   return 0;
}

gcc編譯生成可執行文件,在終端上輸入:


程序運行結束之後,看到valgrind的輸出信息:


以上報告兩處錯誤,Invalid write of size 4,是因爲我們給數組的第10個元素賦值0,發生訪問越界,在run.c文件的第7行發生這樣的錯誤。

然後我們只malloc沒有free,valgrind提示我們在run.c第6行發生。

leak-check=full選項是輸出詳細信息,問題代碼的所在的行,這樣會顯得更清晰,show-reachable用來控制是否顯示控制之外的泄漏,如果設置爲no,那麼全局指針static指針將無法檢測到。

作者在實際開發中,valgrind主要用來分析代碼的內存泄漏問題,其它的工具還沒用過。

valgrind有官網,上面有詳細的說明文檔,如有更深層次的需要,可移步官網Valgrind


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章