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

  • 相关阅读:
    maven 配置
    如何快速在当前目录打开cmd命令提示符
    IntelliJ IDEA手工安python装插件方法
    Ubuntu14.04安装build-essential失败,包依赖问题如何解决?
    Xshell的telnet简化登录
    spring注入简记
    eclipse 技巧
    Linq 等式运算符:SequenceEqual(转载)
    一个可定制的图标网站
    EF 批量增删改 EntityFramework.Extensions
  • 原文地址:https://www.cnblogs.com/fellow1988/p/6184754.html
Copyright © 2011-2022 走看看