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

  • 相关阅读:
    JVM类加载的过程
    接口文档设计
    代码规范及CodeReview要点
    Linux权限
    Linux文件
    UltraEdit编辑器基础技巧
    Android环境配置
    JDK 环境配置
    xml没有提示解决办法<eclipse>
    mysql事务实例
  • 原文地址:https://www.cnblogs.com/fellow1988/p/6184754.html
Copyright © 2011-2022 走看看