zoukankan      html  css  js  c++  java
  • mtrace 简介

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

    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的內容转化成能被理解的语句。

     另外一种定位mem leak方法:

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

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

  • 相关阅读:
    对于函数中多个返回值的处理
    Docker-compose 安裝单机版redis
    设计模式七大设计原则
    UML 设计技巧
    使用Docker 容器配置nexus3.29 私有仓库
    分布式消息Kafka通信原理分析
    分布式消息Kafka通信
    使用docker 搭建nexus3.29
    分布式消息Kafka初步认识及基本应用
    Dubbo 常用配置及源码分析
  • 原文地址:https://www.cnblogs.com/fellow1988/p/6184754.html
Copyright © 2011-2022 走看看