程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> Linux 下面使用 mtrace 來檢查一般的程序的內存溢出

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

編輯:C語言基礎知識

  對於內存溢出之類的麻煩可能大家在編寫指針比較多的復雜的程序的時候就會碰到。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," 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
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved