mtrace 简介

摘要:
Linux提供mtrace/muntrace来检测程序是否存在内存泄漏。对于mtrace的每一个malloc空闲执行,如果每个malloc都有相应的空闲,则意味着没有内存泄漏。对于在非malloc/free条件下发生的任何内存泄漏问题,mtrace都无法找到它。在使用mtrace之前,必须首先设置环境变量“MALLOC_TRACE”以指定mtrace检测结果的文件名。让我们写一个简单的示例来看看mtrace是如何使用的:#include #include<stdlib h>voidmain{setenv;mtrace();int*p1=malloc;int*p2=malloc;free;muntrace();return;}gcc-gtest-mrace。c-otest_Mrace运行测试_Mrace,将生成指定的文件Mtrace输出。此文件为txt类型。如何查看mtrace结果:mtrace〔binary〕output_file_name

内存泄露问题一般会再长时间运行的程序中暴露出来。而且一般很难定位和查找。

linux 提供mtrace/muntrace来检测程序是否有内存泄露。一般来说要检测哪一段代码是否有内存泄露,就可以用这一对函数包起来。

mtrace每一对malloc-free的执行,若每一个malloc都有相应的free,则代表没有内存泄露,对于任何非malloc/free情況下所发生的内存泄露问题,mtrace并不能找出来。

在使用mtrace之前,先要设置一个环境变量“MALLOC_TRACE”来指定mtrace检测结果的生成文件名。通过此文件就可以看出代码是否有内存泄露。

MALLOC_TRACE可以用export MALLOC_TRACE=xxx来设置,也可以通过setenv设置。

下面写个简单的sample来看看mtrace是怎样使用的:

#include <mcheck.h>
#include <stdlib.h>

void main(void)
{
  setenv("MALLOC_TRACE", "/mnt/hgfs/share/test/mtrace_output", 1);
  mtrace();
  int *p1 = (int*)malloc(sizeof(int));
  int *p2 = (int*)malloc(sizeof(int));
  free(p1);
  muntrace();
  return;
}

gcc -g test_mtrace.c -o test_mtrace

运行test_mtrace,就会生成指定文件mtrace_output.此文件是一个txt类型。

查看mtrace结果的方法:mtrace [binary] output_file_name。就会将output_file_name的內容转化成能被理解的语句。
mtrace 简介第1张

 另外一种定位mem leak方法:

https://blog.csdn.net/lbo4031/article/details/51592476

https://blog.csdn.net/hanyin7/article/details/38377743

免责声明:文章转载自《mtrace 简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaScript的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容、属性等delphi计算两个时间差-转下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Fiddler 502问题

在使用Fiddler时,我遇到了以下问题:我想在地址栏中打开一个通用处理程序,但当我没有打开Fiddler的时候,它会正常显示。检查Fiddler。第二个Raw的消息显示在底部:53582 53582是我的机器的端口号。左侧的web会话窗口显示以下内容:502状态代码表示服务器暂时不可用。Fiddler选项-&gt,启用Ipv6(如果有)以移除钩子;...

说说接口封装

今天,我为同事封装了一个接口。当谈到接口封装时,有很多关于它的讨论。在很多情况下,说一个服务好,一个服务坏,实际上是在吐槽服务团队之外暴露的界面质量。无论哪种语言,抽象的封装接口都由一个函数名、几个参数和几个返回值组成。总之,参数不应该被封装……我们在内部尝试接口_Catch不会抛出异常,所有信息都将以错误代码的形式返回。就php而言,建议进行异常处理。...

ubuntu的ufw如何开放特定端口?

ubuntu的ufw是如何打开特定端口的?1.安装sudoapt getinstallufw2.启用sudoufwenable以默认情况下禁用外部访问sudoufwdefaultdeny 3.查看状态sudoufwstatus4.添加端口sudoufwallow80805。删除端口sudoufwdeleteallow808080806。允许特定源的IP地址从...

Uni-app v-on监听事件

使用标记上的v-on监视事件。缩写为@click common click events方法:方法:{Focus(){console.log;},blur(){console.log;},confirm(){console.log;},click(){console.log;},tap(){console.log;},longpress(){console....

springMVC使用map接收入参 + mybatis使用map 传入查询参数

测试示例:控制器层使用映射来接收请求参数。从Debug中可以看到,请求中的参数值都是字符串形式。如果接收参数的映射直接传输到服务,mybatis将在接收参数时报告错误。因此,您需要首先对请求中的参数1packageorg.slsale进行预处理。测验23导入java.util。日期4导入java.util。HashMap;5导入java.ut...

java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

主要用于西门子PLC的M、Q、I、DB块的数据读写。该组件支持快速建立高性能Modbus TCP终端。对于日志记录,暂时只保留接口。具体来说,您可以为该组件支持的西门子通信实现两种协议。一种是S7协议,它几乎不需要PLC侧的参数配置。另一个是Fetch/Write协议,它有点麻烦。如果S7不方便阅读,您可以选择“获取/写入”。S7更方便。...