利用mtrace來定位memory leak

2021-09-24 10:34:00 字數 1586 閱讀 1794

mtrace 來自gnu(分配記憶體必須使用glibc的記憶體分配函式,,使用方法比較簡單,例子如下:

#include

#include

#include

void

mtrace_test()

intmain

(int argc,

char

const

*ar**)

其中函式setenv()的原型如下:

int

setenv

(const

char

*name,

const

char

*value,

int overwrite)

;

它是用來改變或增加環境變數的內容。引數name為環境變數名稱字串。引數 value則為變數內容,引數overwrite用來決定是否要改變已存在的環境變數。如果沒有此環境變數則無論overwrite為何值均新增此環境變數。若環境變數存在,當overwrite不為0時,原內容會被改為引數value所指的變數內容;當overwrite為0時,則引數value會被忽略。返回值 執行成功則返回0,有錯誤發生時返回-1。

注意編譯的時候帶上-g引數,方便定位記憶體洩露的點

$ gcc -g main.c -o test

$ ./test

$ mtrace test memory_leck.log

結果如下:

提示main.c的第七行有未free導致的記憶體洩露。

使用方法ps

例子中的記憶體洩露比較簡單,有時候會有比較複雜的呼叫,例如呼叫動態庫和靜態庫中的函式,庫函式洩露的怎麼定位呢?

方法其實都是一樣的,就是在main函式的開始和結束,卡上mtrace()和muntrace()即可,這樣庫函式的記憶體洩露也可以定位,例如

/* mem_leck_lib */

#include

#include

void

mtrace_test()

上述檔案編譯成libmem_leck.a供main.c進行呼叫,注意!編譯.a也**上-g選項

#include

#include

#include

#include

"mem_leck_test.h"

intmain

(int argc,

char

const

*ar**)

執行步驟如下:

$ gcc -g main.c -o test

$ ./test

$ mtrace test memory_leck.log

結果如下:

利用mtrace檢查記憶體洩漏

mtrace是linux下檢查記憶體洩漏的工具之一。它實際上是通過一對函式來檢測一段 是否存在記憶體洩漏 mtrace 與muntrace 它們的原型如下 void mtrace void void muntrace void 標頭檔案為 mcheck.h 用法 1.首先確定需要檢測那一段 2.然後...

利用pathname來定位被啟用的模組

根據url來確定key值 var arr window.location.pathname.split console.log 我是以 為分隔的pathname arr var page arr arr.length 1 replace html 給key值對應的模組加上active console...

利用IP位址定位來停止釣魚威脅

雖然網路釣魚已經不是什麼新鮮事了,但仍然是乙個巨大的威脅,世界各地的資料顯示 在已報告的保安事故總數中,釣魚佔80 以上,而受害者每分鐘因該威脅而損失的金額高達17,700元。目標公司會開啟近30 的釣魚郵件。2019年,約33 的資料洩露涉及網路釣魚或某種形式的社會工程。多達65 的目標攻擊團體通...