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 是你要除錯的那個串列埠的裝置名稱有很...