Linux下Valgrind的使用筆記

1.安裝

sudo apt-get install valgrind

2.valgrind命令的格式:

valgrind [valgrind-options] your-prog [your-prog options]

3.運行

生成可執(zhí)行程序

gcc -g -O0 test.c -o test

執(zhí)行valgrind

valgrind --leak-check=full --log-file=test_valgrind.log --num-callers=30 ./test

--log-file 后面的test_valgrind.log是指定生成的日志文件名稱。
--num-callers 后面的30是生成的每個錯誤記錄的追蹤行數。如果沒指定,默認是12行貌似(有可能有的追蹤行就沒顯示)。
--leak-check=full 表示開啟詳細的內存泄露檢測器。

4.主要檢查的程序錯誤:

1.使用未初始化的內存 (Use of uninitialised memory)
2.使用已經釋放了的內存 (Reading/writingmemory after it has been free’d)
3.使用超過 malloc分配的內存空間(Reading/writing off the end of malloc’d blocks)
4.對堆棧的非法訪問 (Reading/writinginappropriate areas on the stack)
5.申請的空間是否有釋放 (Memory leaks –where pointers to malloc’d blocks are lost forever)
6.malloc/free/new/delete申請和釋放內存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
7.src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions)

Callgrind
  Callgrind收集程序運行時的一些數據,函數調用關系等信息,還可以有選擇地進行cache模擬。在運行結束時,它會把分析數據寫入一個文件。callgrind_annotate可以把這個文件的內容轉化成可讀的形式。

Cachegrind
它模擬 CPU中的一級緩存I1,D1和L2二級緩存,能夠精確地指出程序中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數,內存引用次數,以及每行代碼,每個函數,每個模塊,整個程序產生的指令數。這對優(yōu)化程序有很大的幫助。

Helgrind
  它主要用來檢查多線程程序中出現的競爭問題。Helgrind 尋找內存中被多個線程訪問,而又沒有一貫加鎖的區(qū)域,這些區(qū)域往往是線程之間失去同步的地方,而且會導致難以發(fā)掘的錯誤。Helgrind實現了名為” Eraser” 的競爭檢測算法,并做了進一步改進,減少了報告錯誤的次數。

Massif
  堆棧分析器,它能測量程序在堆棧中使用了多少內存,告訴我們堆塊,堆管理塊和棧的大小。Massif能幫助我們減少內存的使用,在帶有虛擬內存的現代系統(tǒng)中,它還能夠加速我們程序的運行,減少程序停留在交換區(qū)中的幾率

參考:
Linux下超強內存檢測工具Valgrind
Linux下Valgrind的使用方法

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容