Linux 下面使用 mtrace 来检查一般的程序的内存溢出

_Q757856333于

_Q757856333于

2016-02-19 12:34

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的Linux 下面使用 mtrace 来检查一般的程序的内存溢出,过去的都会过去,迎接崭新的开始,释放更美好的自己。

  对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会碰到。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
展开更多 50%)
分享

猜你喜欢

Linux 下面使用 mtrace 来检查一般的程序的内存溢出

编程语言 网络编程
Linux 下面使用 mtrace 来检查一般的程序的内存溢出

Linux下用Mtrace来检查程序内存溢出

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux下用Mtrace来检查程序内存溢出

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

unix下编写socket程序的一般步骤

编程语言 网络编程
unix下编写socket程序的一般步骤

生产后一般多久来月经

生活常识
生产后一般多久来月经

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

一般的体检能代替孕前检查吗?

电脑网络
一般的体检能代替孕前检查吗?

产后月经一般什么时候来

产后月经 备孕 亲子
产后月经一般什么时候来

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

在IE6系列等老式浏览器中使用HTML5的新标签实现方案

在IE6系列等老式浏览器中使用HTML5的新标签实现方案

在Visual C++中如何利用UDL文件来建立ADO连接

在Visual C++中如何利用UDL文件来建立ADO连接
下拉加载更多内容 ↓