系統程式設計中乙個重要的方面就是有效地處理與記憶體相關的問題。你的工作越接近系統,你就需要面對越多的記憶體問題。有時這些問題非常瑣碎,而更多時候它會演變成乙個除錯記憶體問題的惡夢。所以,在實踐中會用到很多任務具來除錯記憶體問題。valgrind是用於構建動態分析工具的探測框架。它包括乙個工具集,每個工具執行某種型別的除錯、分析或類似的任務,以幫助完善你的程式。valgrind的架構是模組化的,所以可以容易地建立新的工具而又不會擾亂現有的結構。它是執行在linux上一套基於**技術的程式除錯和分析工具,它包含乙個核心──乙個軟體合成的cpu,和一系列的小工具,每個工具都可以完成一項任務──除錯,分析,或測試等。valgrind可以檢測記憶體洩漏和記憶體違例,還可以分析cache的使用等,靈活輕巧而又強大,能直穿程式錯誤的心臟,真可謂是程式設計師的瑞士軍刀。
一、valgrind的主要功能
valgrind工具包包含多個工具,如memcheck,cachegrind,helgrind,callgrind,massif。下面分別介紹個工具的作用:
1.memcheck是乙個記憶體錯誤檢測器。它有助於使你的程式,尤其是那些用c和c++寫的程式,更加準確;
memcheck
工具主要檢查下面的程式錯誤:
2.cachegrind是乙個快取和分支**分析器。它有助於使你的程式執行更快;
它模擬 cpu中的一級快取i1,d1和l2二級快取,能夠精確地指出程式中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數,記憶體引用次數,以及每行**,每個函式,每個模組,整個程式產生的指令數。這對優化程式有很大的幫助。
3.callgrind是乙個呼叫圖快取生成分析器。它與cachegrind的功能有重疊,但也收集cachegrind不收集的一些資訊;
callgrind收集程式執行時的一些資料,函式呼叫關係等資訊,還可以有選擇地進行cache模擬。在執行結束時,它會把分析資料寫入乙個檔案。callgrind_annotate可以把這個檔案的內容轉化成可讀的形式。
4.helgrind是乙個執行緒錯誤檢測器。它有助於使你的多執行緒程式更加準確;
它主要用來檢查多執行緒程式中出現的競爭問題。helgrind 尋找記憶體中被多個執行緒訪問,而又沒有一貫加鎖的區域,這些區域往往是執行緒之間失去同步的地方,而且會導致難以發掘的錯誤。helgrind實現了名為」 eraser」 的競爭檢測演算法,並做了進一步改進,減少了報告錯誤的次數。
5.drd也是乙個執行緒錯誤檢測器。它和helgrind相似,但使用不同的分析技術,所以可能找到不同的問題;
6.massif是乙個堆分析器。它有助於使你的程式使用更少的記憶體;
堆疊分析器,它能測量程式在堆疊中使用了多少記憶體,告訴我們堆塊,堆管理塊和棧的大小。massif能幫助我們減少記憶體的使用,在帶有虛擬記憶體的現代系統中,它還能夠加速我們程式的執行,減少程式停留在交換區中的機率。
7.dhat是另一種不同的堆分析器。它有助於理解塊的生命期、塊的使用和布局的低效等問題;
8.sgcheck是乙個實驗工具,用來檢測堆和全域性陣列的溢位。它的功能和memcheck互補:sgcheck找到memcheck無法找到的問題,反之亦然;
9.bbv是個實驗性質的simpoint基本塊向量生成器。它對於進行計算機架構的研究和開發很有用處。
也有一些對大多數使用者沒有用的小工具:lackey是演示儀器基礎的示例工具;nulgrind是乙個最小化的valgrind工具,不做分析或者操作,僅用於測試
目的。valgrind的命令格式如下:
valgrind [options] prog-and-args
一些常用的選項如下:
-h --help
顯示幫助資訊。
--version
顯示valgrind核心的版本,每個工具都有各自的版本。
-q --quiet
安靜地執行,只列印錯誤資訊。
-v --verbose
列印更詳細的資訊。
--tool= [default: memcheck]
最常用的選項。執行valgrind中名為toolname的工具。如果省略工具名,預設執行memcheck。
--db-attach= [default: no]
繫結到偵錯程式上,便於除錯錯誤。
Valgrind交叉編譯
valgrind交叉編譯 編譯環境 ubuntu16.04 x64 開發平台 hisi3535 arm板 valgrind 3.12.0.tar.bz2 2.交叉編譯valgrind 三步走 1 配置configure configure cc arm hisiv200 linux gcc cxx ...
交叉編譯valgrind
wget tar xvf valgrind 3.12.0.tar.bz2 cd valgrind 3.12.0 sudo apt get install automake configure host armv7 linux cc arm linux gnueabihf gcc cpp arm li...
arm交叉編譯Valgrind
1.wget 把檔案考到板子上,並同步板子的時間到現在。tar xvf valgrind 3.11.0.tar.bz2 cd valgrind 3.11.0 3.configure make make install 注意 prefix opt valgrind指定的目錄要與開發板上放置的目錄一致,...