日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux系統(tǒng)下使用mtrace進行內(nèi)存狀況監(jiān)測

對于內(nèi)存溢出之類的麻煩可能大家在編寫指針比較多的復(fù)雜的程序的時候就會遇到 。Debug起來也是比較累人 。其實Linux系統(tǒng)下有一個使用的工具可以幫忙來調(diào)試的,這就是Mtrace 。Mtrace主要能夠檢測一些內(nèi)存分配和泄漏的失敗等 。下面我們來學習一下它的用法 。
使用Mtrace來調(diào)試程序有4個基本的步驟,需要用到GNU C 函數(shù)庫里面的一些輔助的函數(shù)功能 。
1.在需要跟蹤的程序中需要包含頭文件,而且在main()函數(shù)的最開始包含一個函數(shù)調(diào)用:mtrace() 。由于在main函數(shù)的最開頭調(diào)用了mtrace(),所以該進程后面的一切分配和釋放內(nèi)存的操作都可以由mtrace來跟蹤和分析 。
2.定義一個環(huán)境變量,用來指示一個文件 。該文件用來輸出log信息 。如下的例子:
$export MALLOC_TRACE=mymemory.log
3.正常運行程序 。此時程序中的關(guān)于內(nèi)存分配和釋放的操作都可以記錄下來 。
4.然后用mtrace使用工具來分析log文件 。例如:
$mtrace testmem $MALLOC_TRACE
要注意的是,在很多嵌入式的環(huán)境中,并不提供export命令,也沒有記錄環(huán)境變量的文件 。這時候難道就沒有辦法了么?呵呵,也許,唯一的辦法就是把環(huán)境變量加到應(yīng)用程序中 。在Glibc庫中有putenv函數(shù),就是寫入環(huán)境變量的 。具體的請自己查手冊 。
int putenv (char *string) [Function]
設(shè)置好環(huán)境變量后 。又有一個問題了:如果程序是自運行的,即沒有終止的時候,那想在特定的地方,分析內(nèi)存情況,怎么辦呢?
呵呵,還是看Glibc!,調(diào)用muntrace函數(shù),log文件就生成了 。這時用mtrace命令分析log文件就可以啦 。
下面是具體一個例子,大家可以看一下 。
【Linux系統(tǒng)下使用mtrace進行內(nèi)存狀況監(jiān)測】[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

    推薦閱讀