專案中出現記憶體洩漏是讓人很頭疼的事情,使用了vargrind效果不明顯,可能因為試用了libuv裡面有太多非同步處理,導致使用vargrind會出現段錯誤。後來發現mtrace,使用還是挺簡單的。
mtrace是gnu自帶的庫,因為我的專案是嵌入式開發,使用arm平台,剛開始想交叉編譯mtrace在arm上使用,後來發現沒有必要,使用方法如下。
在**main函式裡加入下面兩行**:
setenv("malloc_trace", "output", 1);
mtrace();
output會在執行的檔案目錄下生成,mtrace()開始檢測malloc函式。
程式執行一段時間,用top發現記憶體洩漏再現後即可把output拖出來,比如arm裡的可執行檔案是test,將test和output放到linux虛擬機器同一目錄下(test是arm的編譯版本,但是不用擔心,虛擬機器下也可以使用),然後執行:
mtrace test output
然後就會看到螢幕上出現許多檔名和對應的函式,這些都是沒有釋放的函式,一般來說多次重複出現的地方就是記憶體洩漏的地方。
mtrace檢查記憶體洩漏
記憶體洩漏檢查方法 for linux 如果你更想讀原始文件,請參考glibc info的 allocation debugging 一章 執行info libc glibc提供了乙個檢查記憶體洩漏的方法,前提是你的程式使用glibc的標準函式分配記憶體 如malloc,alloc.1.在需要記憶體...
mtrace 檢查記憶體洩漏
mtrace 可以用來檢查記憶體洩漏。它利用 malloc hook機制,記錄每乙個記憶體分配的呼叫,在利用gcc的 builtin return address 獲得函式的呼叫位址,生成log檔案。最後通過 程式中的除錯資訊和日誌檔案找出發生記憶體洩漏的函式。記住程式編譯時要帶上除錯資訊,不然只有...
VLD 記憶體洩漏檢查工具
1.安裝vld 2.5.1 2.配置依賴庫,工程新增路徑。additional include directories soup visual leak detector include additional depandencies soup visual leak detector lib wi...