mtrace 可以用來檢查記憶體洩漏。 它利用__malloc_hook機制,記錄每乙個記憶體分配的呼叫,在利用gcc的__builtin_return_address 獲得函式的呼叫位址, 生成log檔案。最後通過 程式中的除錯資訊和日誌檔案找出發生記憶體洩漏的函式。
記住程式編譯時要帶上除錯資訊,不然只有位址了。
利用ld_preload機制, 我們可以不需要修改程式就可以跟蹤記憶體洩漏的問題。
mtrace.so.cpp
#include編譯<
mcheck.h
>
#include
<
stdlib.h
>
static
void
init() __attribute__((constructor));
void
init()
mtrace();
}
g++ mtrace.so.cpp -fpic -shared -ggdb -o mtrace.so
執行
ld_preload=~/bin/mtrace.so ./your_prg
分析
mtrace ./your_prg ./mtrace.log
優點: 速度快。
缺點:只能檢測洩漏問題, 而且一些不是洩漏的地方也會列印出來。 對踩記憶體,記憶體越界訪問, 快取區溢位等沒有辦法。
mtrace檢查記憶體洩漏
記憶體洩漏檢查方法 for linux 如果你更想讀原始文件,請參考glibc info的 allocation debugging 一章 執行info libc glibc提供了乙個檢查記憶體洩漏的方法,前提是你的程式使用glibc的標準函式分配記憶體 如malloc,alloc.1.在需要記憶體...
利用mtrace檢查記憶體洩漏
mtrace是linux下檢查記憶體洩漏的工具之一。它實際上是通過一對函式來檢測一段 是否存在記憶體洩漏 mtrace 與muntrace 它們的原型如下 void mtrace void void muntrace void 標頭檔案為 mcheck.h 用法 1.首先確定需要檢測那一段 2.然後...
c記憶體洩漏檢查工具 mtrace
專案中出現記憶體洩漏是讓人很頭疼的事情,使用了vargrind效果不明顯,可能因為試用了libuv裡面有太多非同步處理,導致使用vargrind會出現段錯誤。後來發現mtrace,使用還是挺簡單的。mtrace是gnu自帶的庫,因為我的專案是嵌入式開發,使用arm平台,剛開始想交叉編譯mtrace在...