-- 作者 謝恩銘 轉(zhuǎn)載請注明出處
內(nèi)容簡介
- Valgrind是什么盐杂?
- Valgrind的使用
- Valgrind詳細教程
1. Valgrind是什么户辫?
Valgrind是一套Linux下裆站,開放源代碼(GPL
V2)的仿真調(diào)試工具的集合。Valgrind由內(nèi)核(core)以及基于內(nèi)核的其他調(diào)試工具組成巧勤。
內(nèi)核類似于一個框架(framework)小染,它模擬了一個CPU環(huán)境渣玲,并提供服務給其他工具喂窟;而其他工具則類似于插件 (plug-in)庐椒,利用內(nèi)核提供的服務完成各種特定的內(nèi)存調(diào)試任務椒舵。
Valgrind的體系結(jié)構(gòu)如下圖所示:
Valgrind包括如下一些工具:
Memcheck:這是valgrind應用最廣泛的工具,一個重量級的內(nèi)存檢查器约谈,能夠發(fā)現(xiàn)開發(fā)中絕大多數(shù)內(nèi)存錯誤使用情況笔宿,比如:使用未初始化的內(nèi)存,使用已經(jīng)釋放了的內(nèi)存棱诱,內(nèi)存訪問越界等泼橘。
Callgrind:它主要用來檢查程序中函數(shù)調(diào)用過程中出現(xiàn)的問題。
Cachegrind:它主要用來檢查程序中緩存使用出現(xiàn)的問題迈勋。
Helgrind:它主要用來檢查多線程程序中出現(xiàn)的競爭問題炬灭。
Massif:它主要用來檢查程序中堆棧使用中出現(xiàn)的問題靡菇。
Extension:可以利用core提供的功能重归,自己編寫特定的內(nèi)存調(diào)試工具。
2. Valgrind的使用
為了使valgrind發(fā)現(xiàn)的錯誤更精確厦凤,如能夠定位到源代碼行鼻吮,建議在編譯時加上-g參數(shù),編譯優(yōu)化選項請選擇O0较鼓,雖然這會降低程序的執(zhí)行效率椎木。
這里用到的示例程序文件名為:test.c违柏,選用的編譯器為gcc。
生成可執(zhí)行程序
gcc -g -O0 test.c -o test
生成可執(zhí)行程序test之后香椎,如何使用Valgrind來生成內(nèi)存的記錄文件呢漱竖?一般這樣使用:
valgrind --leak-check=full --log-file=test_valgrind.log --num-callers=30 ./test
--log-file 后面的test_valgrind.log是指定生成的日志文件名稱。
--num-callers 后面的60是生成的每個錯誤記錄的追蹤行數(shù)畜伐。30是隨便設(shè)定的馍惹,如果沒指定,默認是12行貌似(有可能有的追蹤行就沒顯示)烤礁。
--leak-check=full 表示開啟詳細的內(nèi)存泄露檢測器讼积。
3. Valgrind詳細教程
詳細教程請看這篇文章:
應用Valgrind發(fā)現(xiàn)Linux程序的內(nèi)存問題
我是謝恩銘,在法國巴黎奮斗的嵌入式軟件工程師脚仔。
目前工作是Android嵌入式和app開發(fā)。
熱愛生活舆绎,喜歡游泳鲤脏,略懂烹飪。