Linux下的記憶體除錯工具 valgrind

2021-06-15 02:32:08 字數 1550 閱讀 7474

valgrind

工具包包含多個工具,如memcheck,cachegrind,helgrind, callgrind,massif。下面分別介紹個工具的作用:

一、memcheck 工具主要檢查下面的程式錯誤:

使用未初始化的記憶體

使用已經釋放了的記憶體 

使用超過 malloc分配的記憶體空間

對堆疊的非法訪問 

申請的空間是否有釋放

malloc/free/new/delete申請和釋放記憶體的匹配

src和dst的重疊

#include void func(void)

int main()

gcc -wall test.c -g -o test

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

二、callgrind

callgrind收集程式執行時的一些資料,函式呼叫關係等資訊,還可以有選擇地進行cache 模擬。在執行結束時,它會把分析資料寫入乙個檔案。callgrind_annotate可以把這個檔案的內容轉化成可讀的形式。

#include #include void f1() } 

void f2() }

void f3() }

int main()

return 0;

}

gcc -o test -g test.c

valgrind --tool=callgrind ./test

要有耐心,上了callgrind執行的程式會非常的慢。

callgrind_annotate callgrind.out.438

三、cachegrind

它模擬 cpu中的一級快取i1,d1和l2二級快取,能夠精確地指出程式中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數,記憶體引用次數,以及每行**,每個函式,每個模組,整個程式產生的指令數。這對優化程式有很大的幫助。

#include #include #define size 1000

int main()

; int i, j;

for ( i=0; ivalgrind –tool=cachegrind ./test1

valgrind –tool=cachegrind ./test2

四、helgrind

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

五、massif

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

linux下記憶體除錯工具 valgrind

1 valgrind之memcheck 最常用的工具,用來檢測程式中出現的記憶體問題,所有對記憶體的讀寫都會被檢測到,一切對malloc free new delete的呼叫都會 獲。所以,它能檢測以下問題 1 對未初始化記憶體的使用 2 讀 寫釋放後的記憶體塊 3 讀 寫超出malloc分配的記憶...

Linux下GDB除錯工具

1.常用的除錯 的方法 不管你使用哪種方法除錯 都需要有足夠的耐性 方法一 在 中加入列印語句 在關鍵語句的前後 函式呼叫 關鍵變數 方法二 使用gdb除錯 原理也是讓程式分步執行,列印關鍵變數的值 1 使用gdb在編譯程式的時候必須加上 g選項 將程式的除錯資訊新增到生成的可執行程式中 gcc m...

linux下串列埠除錯工具

之前公司訂購了幾台裝置,剛開始接觸串列埠的時候,對串列埠了解太少,以下是在使用過程中用到的串列埠除錯命令和方法 1.除錯串列埠首先要用串列埠命令測試串列埠指示燈亮不亮,在linux下使用的命令如下 stty f dev ttys0 a 說明哈 dev ttys0 是你要除錯的那個串列埠的裝置名稱有很...