Linux 下面使用 mtrace 來檢查一般的程序的內存溢出

王朝system·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

對於內存溢出之類的麻煩可能大家在編寫指針比較多的復雜的程序的時候就會碰到。Debug起來也是比較累人。其實Linux系統下有一個使用的工具可以幫忙來調試的,這就是mtrace。Mtrace主要能夠檢測一些內存分配和泄漏的失敗等。下面我們來學習一下它的用法。

使用mtrace來調試程序有4個基本的步驟,需要用到GNU C 函數庫裏面的一些輔助的函數功能。

1. 在需要跟蹤的程序中需要包含頭文件<mcheck.h>,而且在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 <mcheck.h>

#include <stdio.h>

#include <stdlib.h>

int main()

{

char *hello;

mtrace();

hello = (char*) malloc(20);

sprintf(hello,"\nhello world!");

return 1;

}

[hwang@langchao test]$export MALLOC_TRACE=mytrace.log

[hwang@langchao test]$ gcc testmtrace.c -o testmtrace

[hwang@langchao test]$./testmtrace

[hwang@langchao test]$ mtrace testmtrace mytrace.log

Memory not freed:

-----------------

Address Size Caller

0x08049860 0x14 at /usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/init.c:0

 
 
 
免責聲明:本文為網絡用戶發布,其觀點僅代表作者個人觀點,與本站無關,本站僅提供信息存儲服務。文中陳述內容未經本站證實,其真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
© 2005- 王朝網路 版權所有 導航