linux下記憶體除錯工具 valgrind

2021-09-07 00:16:56 字數 1168 閱讀 3431

1、valgrind之memcheck 

最常用的工具,用來檢測程式中出現的記憶體問題,所有對記憶體的讀寫都會被檢測到,一切對malloc()/free()/new/delete的呼叫都會**獲。所以,它能檢測以下問題: 

1、對未初始化記憶體的使用; 

2、讀/寫釋放後的記憶體塊; 

3、讀/寫超出malloc分配的記憶體塊; 

4、讀/寫不適當的棧中記憶體塊; 

5、記憶體洩漏,指向一塊記憶體的指標永遠丟失; 

6、不正確的malloc/free或new/delete匹配; 

7、memcpy()相關函式中的dst和src指標重疊。 

這些問題往往是c/c++程式設計師最頭疼的問題,memcheck在這裡幫上了大忙。 

2、valgrind之callgrind 

和gprof類似的分析工具,但它對程式的執行觀察更是入微,能給我們提供更多的資訊。和gprof不同,它不需要在編譯源**時附加特殊選項,但加上除錯選項是推薦的。callgrind收集程式執行時的一些資料,建立函式呼叫關係圖,還可以有選擇地進行cache模擬。在執行結束時,它會把分析資料寫入乙個檔案。callgrind_annotate可以把這個檔案的內容轉化成可讀的形式。 

3、valgrind之cachegrind 

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

4、valgrind之helgrind 

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

5、valgrind之massif 

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

此外,lackey和nulgrind也會提供。lackey是小型工具,很少用到;nulgrind只是為開發者展示如何建立乙個工具。

Linux下的記憶體除錯工具 valgrind

valgrind 工具包包含多個工具,如memcheck,cachegrind,helgrind,callgrind,massif。下面分別介紹個工具的作用 一 memcheck 工具主要檢查下面的程式錯誤 使用未初始化的記憶體 使用已經釋放了的記憶體 使用超過 malloc分配的記憶體空間 對堆疊...

Linux下GDB除錯工具

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

linux下串列埠除錯工具

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