原文链接

常用内存泄露检测手段有

dmalloc是一个简单易用的C/C++内存leak检查工具,以一个运行库的方式发布。

dmalloc能够检查出直到程序运行结束还没有释放的内存,并且能够精确指出在
哪个源文件的第几行。

dmalloc 主页: http://dmalloc.com

支持的平台:AIX, BSD/OS, DG/UX, Free/Net/OpenBSD, GNU/Hurd, HPUX, Irix, Linux, MS-DOG, NeXT, OSF, SCO, Solaris, SunOS, Ultrix, Unixware, Windoze, and even Unicos on a Cray T3E

最新版本: 5.5.2

安装:下载 http://dmalloc.com/releases/dmalloc-5.5.2.tgz

  1. tar zxvf dmalloc-5.5.2.tgz
  2. cd dmalloc-5.5.2
  3. ./configure
  4. make
  5. make install

设置环境变量:
对于 Bash, ksh, and zsh (http://www.zsh.org/), 在 `.bashrc', `.profile', or `.zshrc'
文件中加入一行 ( -b 参数表示针对Bash的输出):

function dmalloc { eval `command dmalloc -b $*`; }

然后重新登陆用户,或者执行: source ~/.bashrc 或 source ~/.profile

接下面执行:

  1. dmalloc -l logfile -i 100 low

在源文件中添加下面的C代码:

#ifdef DMALLOC
#include "dmalloc.h"
#endif

编译使用的CFLAGS: -DDMALLOC -DDMALLOC_FUNC_CHECK

如: gcc -DDMALLOC -DDMALLOC_FUNC_CHECK dm_test.c

执行:
./a.out

运行上面的命令会在当前目录下生成 logfile文件,查看logfile的内容如下:

cat logfile

  1. 1214894489: 2: Dmalloc version '5.5.2' from 'http://dmalloc.com/'
  2. 1214894489: 2: flags = 0x4e48503, logfile 'logfile'
  3. 1214894489: 2: interval = 100, addr = 0, seen # = 0, limit = 0
  4. 1214894489: 2: starting time = 1214894489
  5. 1214894489: 2: process pid = 9560
  6. 1214894489: 2: Dumping Chunk Statistics:
  7. 1214894489: 2: basic-block 4096 bytes, alignment 8 bytes
  8. 1214894489: 2: heap address range: 0xb8020000 to 0xb8029000, 36864 bytes
  9. 1214894489: 2:     user blocks: 1 blocks, 4043 bytes (10%)
  10. 1214894489: 2:    admin blocks: 8 blocks, 32768 bytes (89%)
  11. 1214894489: 2:    total blocks: 9 blocks, 36864 bytes
  12. 1214894489: 2: heap checked 1
  13. 1214894489: 2: alloc calls: malloc 2, calloc 0, realloc 0, free 0
  14. 1214894489: 2: alloc calls: recalloc 0, memalign 0, valloc 0
  15. 1214894489: 2: alloc calls: new 0, delete 0
  16. 1214894489: 2:   current memory in use: 11 bytes (2 pnts)
  17. 1214894489: 2:  total memory allocated: 11 bytes (2 pnts)
  18. 1214894489: 2:  max in use at one time: 11 bytes (2 pnts)
  19. 1214894489: 2: max alloced with 1 call: 6 bytes
  20. 1214894489: 2: max unused memory space: 53 bytes (82%)
  21. 1214894489: 2: top 10 allocations:
  22. 1214894489: 2:  total-size  count in-use-size  count  source
  23. 1214894489: 2:           6      1           6      1  dm_test.c:71
  24. 1214894489: 2:           5      1           5      1  dm_test.c:69
  25. 1214894489: 2:          11      2          11      2  Total of 2
  26. 1214894489: 2: Dumping Not-Freed Pointers Changed Since Start:
  27. 1214894489: 2:  not freed: '0xb8028fc8|s1' (6 bytes) from 'dm_test.c:71'
  28. 1214894489: 2:  not freed: '0xb8028fe8|s1' (5 bytes) from 'dm_test.c:69'
  29. 1214894489: 2:  total-size  count  source
  30. 1214894489: 2:           6      1  dm_test.c:71
  31. 1214894489: 2:           5      1  dm_test.c:69
  32. 1214894489: 2:          11      2  Total of 2
  33. 1214894489: 2: ending time = 1214894489, elapsed since start = 0:00:00

那么,哪个地方的内存leak就一目了然了。

//====== dm_test.c 源代码 =============

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #ifdef DMALLOC
  6. #include <dmalloc.h>
  7. #endif
  8.  
  9. int main(int argc, char **argv)
  10. {
  11.    
  12.     char *str;
  13.  
  14.     str = malloc(5);
  15.  
  16.     str = malloc(6);
  17.    
  18.     return 0;
  19. }

dmalloc用法快速入门的更多相关文章

  1. sass用法快速入门

    1.@mixin用法 (混合样式)    2.定义变量用$  (可作为全局变量使用) 命名规范 —— 遵守语义化命名:lg-大号.md-中号.base-基本号.sm-小号.mini-超小号 $font ...

  2. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  3. RequireJS 快速入门

      说明:本文只提供快速入门内容,方便快速进入实战状态.更高级的配置,请参考官网文档. 当初之所以使用 RequireJS 等工具,是因为想提高js的加载速度,避免不必要的堵塞.但通过一段时间的使用, ...

  4. Linux快速入门03-系统管理

    这部分将涉及常用的各类linux命令和一些系统高级管理特性,尤其是shell script的创建,这部分在系统自动化运维时会很有作用. Linux系列文章 快速入门系列--Linux--01基础概念 ...

  5. Toad快速入门

    Toad快速入门       在实际中,Toad的用户很少用到其强大的新特性,同时新用户的摸索式熟悉Toad往往花费更多的时间.为此,铸锐数码为每个新购买Toad客户,提供两人次的在线培训服务,帮助客 ...

  6. HTML快速入门4

    七.表单 1. 概述 建立交互式的站点,需要使用 HTML 表单,它可以让用户提供信息,并对此作出处理.可以建立类似 复选框.单选按钮及文本框的控件. 掌握表单的使用对 Active Server P ...

  7. Qt 动画快速入门(一)

    Qt-4.6动画Animation快速入门三字决 Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序.不必像以前的版本一样,所有的控件都枯燥的呆在伟 ...

  8. 跨浏览器复制神器 ZeroClipboard 2.x快速入门详解

    有些时候,我们希望让用户在网页上完成某个操作就能自动将指定的内容复制到用户计算机的剪贴板中.但是出于安全原因,大多数现代浏览器都未提供通用的剪贴板复制接口(或即便有,也默认被禁用).只有IE浏览器可以 ...

  9. Spring Boot 快速入门

    Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...

随机推荐

  1. 2.vector数组

    创建vector数组 vector<,,,, }; 尾部插入 ; i < ; i++) { myint.push_back(i); } 读取头部和尾部 cout << myin ...

  2. 淘宝的css初始化代码

    ;; } body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; } h1, h2, h3, h ...

  3. adapter-自定义adapter的典型写法

    文章参考 http://www.cnblogs.com/mengdd/p/3254323.html import android.content.Context; import android.vie ...

  4. ie为什么那么垃圾(不是ie垃圾,是ie用的人太多了,很多在用低版本)

    ie为什么那么垃圾(不是ie垃圾,是ie用的人太多了,很多在用低版本) 一.总结 1.我们觉得ie差的原因:我们拿老的ie和最新的其它浏览器做比较了,两者相差了很多年.比较微软几十年才发布了11个ie ...

  5. rocketmq事务消息入门介绍

    说明 周五的时候发了篇:Rocketmq4.3支持事务啦!!!,趁着周末的时候把相关内容看了下,下面的主要内容就是关于RocketMQ事务相关内容介绍了. 说明: 今天这篇仅仅是入门介绍,并没有涉及到 ...

  6. 【AtCoder Regular Contest 082 A】Together

    [链接]点击打开链接 [题意] 给你n个数字,每个位置上的数字可以+1,不变,或-1,每个位置只能操作一次. 操作完之后,让你选一个数字x,然后统计a[i]==x的个数count. 问你count的最 ...

  7. JS概述

             从Asp.NET跨越到JavaScript.这既是一个新的领域也是一个非常熟悉的地方,新是由于不知道什么是JavaScript,首先来了解一下什么是JavaScript.       ...

  8. dbms_stats

    dbms_stats全部的功能包例如以下: GATHER_INDEX_STATS:分析索引信息 GATHER_TABLE_STATS:分析表信息,当cascade为true时,分析表.列(索引)信息 ...

  9. 关于在IISserver上执行asp.net Web程序出现以下 “Could not load file or assembly。。。”问题的

    Could not load file or assembly 'System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, Public ...

  10. 优雅地使用Retrofit+RxJava(二)

    前言 在我上一篇讲Retrofit+RxJava在MVP模式中优雅地处理异常(一)中,发现非常多网友发邮箱给我表示期待我的下一篇文章,正好趁着清明假期.我就写写平时我在使用RxJava+Retrofi ...