使用valgrind來檢查記憶體洩漏

2021-08-09 06:22:28 字數 1794 閱讀 6622

之前寫**,有少量的記憶體洩露,平時沒發現,長時間執行才發現問題。為以後更方便的檢測記憶體洩漏問題,於是學習使用了valgrind來對記憶體洩漏進行檢測。valgrind不止可以檢測記憶體洩露,但目前只使用這一功能。

./configure

make

make install

如遇提示許可權不夠,make前加sudo

如果想驗證是否安裝完成,在終端輸入valgrind --version,若安裝成功,會輸出相應版本,如圖

終端進入可執行檔案所在的資料夾,輸入

valgrind --tool=memcheck --leak-check

=full

--show-leak

-kinds

=all

--undef-value

-errors

=no --

log-file

=log

./可執行檔名

即可在終端所在資料夾下生成log檔案,如圖

在log檔案最後會有個summary,其中對記憶體洩露進行了分類,總共有五類:

(1) 「definitely lost」 意味著你的程式一定存在記憶體洩露;

(2)」indirectly lost」意味著你的程式一定存在記憶體洩露,並且洩露情況和指標結構相關

(3) 「possibly lost」 意味著你的程式一定存在記憶體洩露,除非你是故意進行著不符合常規的操作,例如將指標指向某個已分配記憶體塊的中間位置。

(4) 「still reachable」 意味著你的程式可能是沒問題的,但確實沒有釋放掉一些本可以釋放的記憶體。這種情況是很常見的,並且通常基於合理的理由。

(5)」suppressed」 意味著有些洩露資訊被壓制了。在預設的 suppression 檔案中可以看到一些 suppression 相關設定。

其中,如果二叉樹的根節點被判定為」definitely lost」,則其所有子節點將被判定為」indirectly lost」,而如果你正確修復了型別為 「definitely lost」 的根節點洩露,那麼型別為 「indirectly lost」 的子節點洩露也會隨著消失。

對於如上圖所示的情況,posslbly lost其實並沒有造成記憶體上的影響,如果想要過濾掉該類報告資訊,可以加入--show-possibly-lost=no,而對於」still reachable」 ,同樣可以通過--show-reachable=yes來控制是否輸出相應的資訊。

如果某些需要的庫沒有找到,用指令

export ld_library_path=/usr/local

/mysql/lib

:$ld_library_path

進行新增

在log中由summary往上翻即可看到對應的錯誤,錯誤是不斷細化的,比如

這樣的是乙個錯誤,先告訴你出現了多少的記憶體洩露,然後從最裡層不斷往外部函式顯示:先說是calloc造成的錯誤,然後不斷往外部函式顯示。可以從下往上進行檢視,比如先說main()函式發生了洩露,往上看到是main()中的init()函式,再往上init()中的init_detectionmodel,如此不斷細定位洩露位置。

使用valgrind來檢查記憶體洩漏

之前寫 有少量的記憶體洩露,平時沒發現,長時間執行才發現問題。為以後更方便的檢測記憶體洩漏問題,於是學習使用了valgrind來對記憶體洩漏進行檢測。valgrind不止可以檢測記憶體洩露,但目前只使用這一功能。1.安裝 configure make make install 如遇提示許可權不夠,m...

記憶體檢查工具valgrind

valgrind是一套linux下的開放源 的 除錯工具的集合。valgrind由核心以及基於核心的其他除錯工具組成。valgrind包括以下的一些工具 在了解valgrind之前可以了解一下linux程式記憶體空間布局 0指定安裝路徑和生成makefile configure prefix hom...

安裝Valgrind並檢查記憶體洩露

第二種方式 使用二進位製包安裝,以ubuntu 14.04 64bit為例,輸入下面的安裝命令 sudo apt get install valgrind 所以最好的方法,我選擇下面的第三種方法 valgrind使用方法 用法 valgrind options prog and args optio...