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

2016-01-29 17:59 124 1 收藏

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

【 tulaoshi.com - Linux 】

对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实Linux系统下有一个使用的工具可以帮忙来调试的,这就是Mtrace。Mtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法。

使用Mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的函数功能。

1. 在需要跟踪的程序中需要包含头文件,而且在main()函数的最开始包含一个函数调用:mtrace()。由于在main函数的最开头调用了mtrace(),所以该进程后面的一切分配和释放内存的操作都可以由mtrace来跟踪和分析。

2. 定义一个环境变量,用来指示一个文件。该文件用来输出log信息。如下的例子:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/linux/)

$export MALLOC_TRACE=mymemory.log

3. 正常运行程序。此时程序中的关于内存分配和释放的操作都可以记录下来。

4. 然后用mtrace使用工具来分析log文件。例如:

$mtrace testmem $MALLOC_TRACE

下面是具体一个例子,大家可以看一下。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/linux/)

[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.logMemory not freed:-----------------Address Size Caller0x08049860 0x14 at /usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/init.c:0

来源:https://www.tulaoshi.com/n/20160129/1503861.html

延伸阅读
标签: PHP
            { 相信大多数人在安装Linux时遇到的第一个难题,就是Linux不认你的显卡。而显卡安装不正确或胡乱选一个驱动程序安上则难以进入X Window。即使勉强进去了,因为分辨率太低,桌面上的文字和图片都放大了好几倍,仍无法使用。我的Linux是Red Hat,显卡是Trident Blade 3D...
三、CGI编程实例 本节将用VB编写一个处理主页客户留言簿的CGI程序。除了要调用本文前面所介绍的Win32API函数外,程序中还调用了Win32API函数GetTempFileName()来获得一个唯一的临时文件名。程序中的函数UrlDecode()用来对客户端的输入进行URL译码。函数GetCgiValue()则用来分解字符串,根据表单元素的NAME属性获取其VALUE值,并调用Ur...
##################echo 1 >/proc/sys/net/ipv4/ip_forward/sbin/modprobe ip_tables/sbin/modprobe iptable_filter/sbin/modprobe iptable_nat/sbin/modprobe ip_conntrack/sbin/modprobe ip_conntrack_ftp/sbin/modprobe ip_nat_ftp/sbin/iptables --flush INPUT/sbin/iptables --flush FORWARD/sbin/iptables --flush POSTROUTING --tabl...
JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。 一、内存溢出类型 1、java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆...
处理 C++ 中的异常会在语言级别上碰到少许隐含限制,但在某些情况下,您可以绕过它们。学习各种利用异常的方法,您就可以生产更可靠的应用程序。保留异常

经验教程

551

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部