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