【調試】Linux下超強內存檢測工具Valgrind


【調試】Linux下超強內存檢測工具Valgrind

 

內容簡介


  1. Valgrind是什么?
  2. Valgrind的使用
  3. Valgrind詳細教程

1. Valgrind是什么?


Valgrind是一套Linux下,開放源代碼(GPL
V2)的仿真調試工具的集合。Valgrind由內核(core)以及基於內核的其他調試工具組成。

內核類似於一個框架(framework),它模擬了一個CPU環境,並提供服務給其他工具;而其他工具則類似於插件 (plug-in),利用內核提供的服務完成各種特定的內存調試任務。

Valgrind的體系結構如下圖所示:

Valgrind包括如下一些工具:

  • Memcheck:這是valgrind應用最廣泛的工具,一個重量級的內存檢查器,能夠發現開發中絕大多數內存錯誤使用情況,比如:使用未初始化的內存,使用已經釋放了的內存,內存訪問越界等。

  • Callgrind:它主要用來檢查程序中函數調用過程中出現的問題。

  • Cachegrind:它主要用來檢查程序中緩存使用出現的問題。

  • Helgrind:它主要用來檢查多線程程序中出現的競爭問題。

  • Massif:它主要用來檢查程序中堆棧使用中出現的問題。

  • Extension:可以利用core提供的功能,自己編寫特定的內存調試工具。

2. Valgrind的使用

為了使valgrind發現的錯誤更精確,如能夠定位到源代碼行,建議在編譯時加上-g參數,編譯優化選項請選擇O0,雖然這會降低程序的執行效率。

這里用到的示例程序文件名為:test.c,選用的編譯器為gcc。

生成可執行程序

gcc -g -O0 test.c -o test

生成可執行程序test之后,如何使用Valgrind來生成內存的記錄文件呢?一般這樣使用:

valgrind --leak-check=full --log-file=test_valgrind.log --num-callers=30 ./test
  • --log-file 后面的test_valgrind.log是指定生成的日志文件名稱。

  • --num-callers 后面的60是生成的每個錯誤記錄的追蹤行數。30是隨便設定的,如果沒指定,默認是12行貌似(有可能有的追蹤行就沒顯示)。

  • --leak-check=full 表示開啟詳細的內存泄露檢測器。

3. Valgrind詳細教程

詳細教程請看這篇文章:
應用Valgrind發現Linux程序的內存問題


我是謝恩銘,在法國巴黎奮斗的嵌入式軟件工程師。
目前工作是Android嵌入式和app開發。
熱愛生活,喜歡游泳,略懂烹飪。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM