萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux系統下使用mtrace進行內存狀況監測

Linux系統下使用mtrace進行內存狀況監測

class="21341">

對於內存溢出之類的麻煩可能大家在編寫指針比較多的復雜的程序的時候就會遇到。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

要注意的是,在很多嵌入式的環境中,並不提供export命令,也沒有記錄環境變量的文件。這時候難道就沒有辦法了麼?呵呵,也許,唯一的辦法就是把環境變量加到應用程序中。在Glibc庫中有putenv函數,就是寫入環境變量的。具體的請自己查手冊。

int putenv (char *string) [Function]

設置好環境變量後。又有一個問題了:如果程序是自運行的,即沒有終止的時候,那想在特定的地方,分析內存情況,怎麼辦呢?

呵呵,還是看Glibc!,調用muntrace函數,log文件就生成了。這時用mtrace命令分析log文件就可以啦。

下面是具體一個例子,大家可以看一下。

[hwang@langchao test]$ cat testmtrace.c
#include <>
#include
#include
int main()
{
char *hello;
mtrace();
hello = (char*) malloc(20);
sprintf(hello,"
hello 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

copyright © 萬盛學電腦網 all rights reserved