dmalloc工具的使用

2021-09-29 09:33:15 字數 1916 閱讀 9594

在linux中多執行緒程式設計的過程中,很容易出現記憶體洩漏的問題,最近遇見了一次記憶體洩漏導致程序崩潰,記錄一下除錯過程。

dmalloc :debug malloc library,以一種庫的形式發布,dmalloc可以精準的檢測出沒釋放記憶體的申請位置(哪個c檔案第幾行),並自動將debug資訊儲存下來。

除錯平台:mips 32

除錯硬體:君正 x1630

linux版本:3.10.14+

3、進入目錄,cd dmalloc-5.5.2執行配置檔案:./configure

4、修改makefile,將makefile裡面的gcc工具修改為自己使用的工具鏈vim makefile

#cc = gcc

cc =

../audio_open_source/buildroot/output/host/usr/bin/mips-linux-gnu-gcc

cxx = g++

4、編譯執行緒可重入版本的靜態庫:make threads

若需要編譯支援c++的版本的靜態庫make threadscxx

5、編譯完成後,該目錄下生成 靜態庫檔案 libdmallocth.a 和標頭檔案 dmalloc.h, 到此為止,可用於除錯的dmalloc庫已完成。

6、將libdmallocth.a 、dmalloc.h拷貝到專案工程中,然後修改makefile:ldflags_common += -ldmallocth

7、修改源**,在.c檔案中包含dmalloc標頭檔案,這樣在輸出的log中可以精確定位到第幾行申請的記憶體沒有釋放,也可以不包含標頭檔案,log中顯示的是呼叫malloc函式的位址。

#ifdef dmalloc

#include "dmalloc.h"

#endif

8、怎麼使用這個庫呢 ? 首先設定環境變數:

dmalloc_options=

"debug=0x4000503,log=/mnt/sdcard/afe_dmalloc.log"

export dmalloc_options

也可以不設定環境變數,直接在程式中呼叫dmalloc介面函式來設定相應的引數:dmalloc_debug_setup("debug=0x4000503,log=/mnt/sdcard/afe_dmalloc.log");

第二步:在程式中週期性呼叫dmalloc_log_stats();dmalloc_log_unfreed();來輸出記憶體使用情況和未釋放的記憶體的情況,還可以監控一段時間內,未釋放的記憶體。

mark = dmalloc_mark(

); //開始標記

//some times

....

dmalloc_log_changed(mark, 1, 0, 1)

; //從標記到現在未釋放的記憶體

9、make clean,make,生成用於除錯的可執行檔案。在目標板上執行就可以在/mnt/sdcard/目錄下看到afe_dmalloc.log檔案了,接下來掛機測試吧

uuencode工具的使用

今天在看一本linux的書籍,其中乙個章節的練習中提到了uuencode這個工具,初始不懂,檢視man幫助之後,依然不知到如何使用,後面google之,終於明白了,記錄之,以防日後忘記,又做重複工作。下面之介紹簡單的uuencode工具的使用。其實uuencode與uudecode是一套工具,都包含...

git工具的使用

轉殖遠端倉庫 git clone git 從遠端倉庫拉取 git pull git 切換本地分支 git checkout branchname 獲取遠端標籤 git pull git tags 推送本地標籤 git push tags 刪除遠端標籤 先刪除本地標籤git tag d tagname...

SQLLoader工具的使用

實習十 sqlloader工具的使用 實驗目的 學習通過sqlloader工具把外部資料匯入到oracle資料庫中。一 sql loader涉及的檔案 控制檔案control file 匯入資料規則 日誌檔案log file 匯入資料記錄 壞檔案bad file 插入記錄出錯,如違反唯一約束,非空約...