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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。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,"\nhello 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
linux下有什么检测内存溢出工具 Linux c++上常用内存泄露检测工具有valgrind, Rational purify。Valgrind免费。Valgrind 可以在 32 位或 64 位 PowerPC/Linux 内核上工作。 Valgrind工具包包含多个工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。 对于内存溢出之类的麻烦可能大家在编写指针比较多的... 阅读详情

相关推荐

Java线上故障排查完整套路和技巧分享[图]

线上故障主要会包括CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top三连,然后依次jstack、jmap伺候,具体问题具体分析即可。 CPU 一般来讲我们首先会排查CPU方面的问题。CPU异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来

minemi的博客 844

Linux查看内存泄露的命令

Linux查看内存泄露的命令

wojiaxiaohuang2014的博客 1万+

linux 编程----内存泄露检测之mtrace

几种常用的内存检测工具 mtrace是一个C函數,在里声明及定义,函数原型为:  void mtrace(void); 其实mtrace是类似malloc_hook的 malloc handler,只不过mtrace的handler function已由系统为你写好,但既然如此,系统又怎么知道你想将malloc/free的记录写在哪里呢?为此,调用mtrace()前要先设置 MALLOC_T

奔跑的蜗牛 1万+

LINUX服务器,内存溢出常用命令

jstack上场,输出进程21711的堆栈信息,然后根据线程ID的十六进制值grep。系统会自动记录OOM时候的内存堆栈,并生成dump文件供开发排查分析。pid直接用ps -ef | grep apusic命令去查就行。一般在启动文件startup.bat或startup.sh中设置。步骤3:通过jmap命令输出内存详细占用日志到指定位置。步骤2:通过jstack命令输出堆栈日志到指定位置。找到最耗费时间的线程,通过下列命令获取到16进制值。此过程不可关闭tomcat。就可以看到它消耗在哪个类。

weixin_43896556的博客 1524

linux下面使用mtrace检查一般程序内存溢出

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

wonderisland的专栏 3400

[ARM] [linux master] 调试技术002 在linux下面使用mtrace检查一般程序内存溢出

linux下面使用mtrace检查一般程序内存溢出 对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。De bug起来也是比较累人。其实linux系统下有一个使用工具可以帮忙来调试的,这就是 mtraceMtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的 用法。 使用mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的

山云的专栏 1127

Linux进程占用master,[ARM] [linux master] 调试技术002 在linux下面使用mtrace检查一般程序内存溢出...

linux下面使用mtrace检查一般程序内存溢出对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实linux系统下有一个使用工具可以帮忙来调试的,这就是mtraceMtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法。使用mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的...

weixin_30316931的博客 245

使用mtrace检查内存溢出

对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实linux系统下有一个使用工具可以帮忙来调试的,这就是mtraceMtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法。 使用mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的函数功能。 1.在需要跟踪的程序中需要包含

linking530的专栏 420

linux中用mtrace 检查内存泄漏

使用mtrace检查内存溢出 对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实linux系统下有一个使用工具可以帮忙来调试的,这就是mtraceMtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法。  使用mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的函数功能

chrysanthemumcao的专栏 878

linux 内存溢出排查_linux程序内存泄漏排查

linux程序内存泄漏排查一、前言C/C++的内存操作一直是一种“诟病”,主要就是由于程序员调用API去操作内存的申请和释放,人不是完美的,所以会造成申请完内存不去释放的现象存在;但是内存只申请不释放,到了一定的阶段,会造成我们的程序崩溃掉;一般我们生产程序跑的时候,我们需要监控内存变化,如果内存可使用大幅度下降,很大概率是由于内存泄漏导致的,这时候,我们需要去定位分析内存泄漏的原因和修复;二、案...

weixin_36410316的博客 2107

Linux下几款C++程序中的内存泄露检查工具

本文更新记录 作者gatieme, CSDN. GitHub 2016-08-08 11:37, 添加了Linux内核内存检测工具Kmemleak 2016-08-08 11:43, 添加了链接内存泄露检测工具比较 Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++。最近用到STL中的List编程,为了检测写的代码是否会发现内存泄漏,了解了一下相

u012662731的博客 2万+

linux c程序内存泄漏检测工具-mtrace工具介绍

笔者也是最近去面试被问到怎么做内存泄漏检查,之前都是靠人工屏蔽代码、或者PC-link/KW一类的检查工具进行检查,回来后搜索了下,才知道linux自带的就有mtrace工具。 具体操作步骤如下: 1.在linux下创建test.c文件,编写如下代码: 1 #include <stdio.h> 2 #include <stdlib.h&g...

weixin_30793643的博客 145

Linux—内存泄露的定位

内存泄露和内存溢出: 内存泄露本意是申请的内存空间没有被正确释放,导致后续程序里这块内存被永远占用。 内存溢出是指存储的数据超出了指定空间的大小,这时数据就会越界。 一、如何认定内存泄露? VmRSS ps axu | grep lighttpd #找到进程的pid cat /proc/pid/status #拿到进程的相关信息。 VmPeak:进程地址空间的大小 VmSize:进程虚拟空间地址的大小,是VmLib,...

Gamble6 1437

内存泄漏检查:windows(CRT) linux(mtrace 内存追踪、valgrind 工具)

【精选】用mtrace定位内存泄漏-CSDN博客内存泄漏定位工具之 valgrind 使用 - 大橙子疯 - 博客园 (cnblogs.com)

qq_37811590的博客 327

linux排查内存泄漏

Memcheck是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。 使用示例: #include <stdio.h> #include <stdlib.h> char* getMemory() { char *p = (char *)mal...

LIEY 2315

2024年Go最全【JVM】内存溢出and内存泄露_char[] was-jvm内存泄露(2),腾讯Golang面试题目

内存使用过程中,不但要确保释放内存,而且用完要尽快释放,而不要全等到退出前释放,以消除隐式泄漏,确保内存占用峰值不超过系统堆资源上限。内存溢出就是你要的内存空间超过了系统实际能分配给你的空间,相当于此时系统没法满足你的需求,就会报内存溢出的错误。一次内存泄露不会有太大的影响,内存泄露堆积到一定程度会造成才能溢出。但内存溢出不一定就是内存泄露引起的。,内存泄露并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,,无法释放已申请的内存,从而造成了内存的浪费。3、Linux下检测内存泄露。

2401_84923269的博客 573
上一篇: shell 中time 命令
下一篇: SSL与TSL
balderfan
博客等级 码龄14年 42粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值