對於記憶體溢位之類的麻煩可能大家在編寫指標比較多的複雜的程式的時候就會遇到。debug起來也是比較累人。其實linux系統下有乙個使用的工具可以幫忙來除錯的,這就是mtrace。mtrace主要能夠檢測一些記憶體分配和洩漏的失敗等。下面我們來學習一下它的用法。
使用mtrace來除錯程式有4個基本的步驟,需要用到gnu c 函式庫裡面的一些輔助的函式功能。
1.在需要跟蹤的程式中需要包含標頭檔案,而且在main()函式的最開始包含乙個函式呼叫:mtrace()。由於在 main函式的最開頭呼叫了mtrace(),所以該程序後面的一切分配和釋放記憶體的操作都可以由mtrace來跟蹤和分析。
2. 定義乙個環境變數,用來指示乙個檔案。該檔案用來輸出log資訊。如下的例子:
$export malloc_trace=mymemory.log
3. 正常執行程式。此時程式中的關於記憶體分配和釋放的操作都可以記錄下來。
4. 然後用mtrace使用工具來分析log檔案。例如:
$mtrace testmem $malloc_trace
下面我們看乙個例子:
[hwang@langchao test]$ cat testmtrace.c
#include
#include
#include
int main()
{ char *hello;
mtrace();
hello = (char*) malloc(20);
sprintf(hello,"nhello world!");
return 1;
memory not freed:
-----------------
address size caller
0x08049860 0x14 at /usr/src/build/53700-i386/build/glibc-2.2.4/csu/init.c:0
使用mtrace檢查記憶體溢位
對於記憶體溢位之類的麻煩可能大家在編寫指標比較多的複雜的程式的時候就會遇到。debug起來也是比較累人。其實linux系統下有乙個使用的工具可以幫忙來除錯的,這就是mtrace。mtrace主要能夠檢測一些記憶體分配和洩漏的失敗等。下面我們來學習一下它的用法。使用mtrace來除錯程式有4個基本的步...
mtrace檢查記憶體洩漏
記憶體洩漏檢查方法 for linux 如果你更想讀原始文件,請參考glibc info的 allocation debugging 一章 執行info libc glibc提供了乙個檢查記憶體洩漏的方法,前提是你的程式使用glibc的標準函式分配記憶體 如malloc,alloc.1.在需要記憶體...
mtrace 檢查記憶體洩漏
mtrace 可以用來檢查記憶體洩漏。它利用 malloc hook機制,記錄每乙個記憶體分配的呼叫,在利用gcc的 builtin return address 獲得函式的呼叫位址,生成log檔案。最後通過 程式中的除錯資訊和日誌檔案找出發生記憶體洩漏的函式。記住程式編譯時要帶上除錯資訊,不然只有...