dmalloc用法快速入门

原文链接

常用内存泄露检测手段有

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. }
时间: 2024-08-22 09:59:22

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

CSS样式表一席谈之CSS快速入门

css|快速入门|样式表 在当今的网页制作中,几乎所有漂亮的网页都用了CSS. CSS是 Cascading Style Sheet的缩写,有些书上把它译为 "层叠样式表".有了CSS的控制,我们的网页便会给人一种赏心悦目.工工整整的感觉,同时字体的色彩变化也使主页变得更加生动活泼.虽然只短短的十几行代码,得到的效果却不同凡响.其基本用法是在网页中插入如下格式的一段代码: 下面以一段比较典型的CSS代码为例介绍其具体用法. 例:这段代码 中间的部分共七行,可看出有这样的特点:前两行的格

Toad 使用快速入门(转载)

快速入门 Toad 使用快速入门                                      目录 一.Toad功能综述二.系统需求三.安装指南四.快速入门1. Schema browser的用法简介2. SQL Editor的使用介绍3. Procedure Editor的用法介绍4. 如何进行PLSQL的debug5. 如何使用SQLab Xpert优化SQL6. 如何使用SQL Modeler来编写查询7. 如何使用Toad的DBA方面的功能 一. Toad功能综述 在Ora

toad快速入门(zz)

快速入门 一. Toad功能综述 在Oracle 应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的.Quest Software为此提供了高效的Oracle应用开发工具-Toad(Tools of Oracle Application Developers).在Toad的新版本中,还加入了DBA模块,可以帮助DBA完成许多日常管理工作.它最大的特点就是简单易用,访问速度快.使用 Toad,我们可以通过一个图形化的

正则表达式快速入门教程

教程|快速入门|入门教程|正则 首先,让我们来了解一下究竟什么是VBScript的"正则表达式"对象,我们先来看一段程序: Function CheckExp(patrn, strng) Dim regEx, Match ' 建立变量. Set regEx = New RegExp ' 建立正则表达式. regEx.Pattern = patrn ' 设置模式. regEx.IgnoreCase = true ' 设置是否区分字符大小写. regEx.Global = True ' 设

ThinkPHP3.1快速入门(4)连贯操作

上一篇我们详细描述了查询语言的用法,但是查询语言仅仅解决了查询或者操作条件的问题,更多的配合还需要使用模型提供的连贯操作方法. 介绍 连贯操作可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作,也是ThinkPHP的ORM中的一个亮点.使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下: $User->where('status=1')->order('create_time')->limit(1

CSS快速入门

css|快速入门     在当今的网页制作中,几乎所有漂亮的网页都用了CSS. CSS是 Cascading Style Sheet的缩写,有些书上把它译为 "层叠样式表".有了CSS的控制,我们的网页便会给人一种赏心悦目.工工整整的感觉,同时字体的色彩变化也使主页变得更加生动活泼.虽然只短短的十几行代码,得到的效果却不同凡响.其基本用法是在网页中插入如下格式的一段代码: 下面以一段比较典型的CSS代码为例介绍其具体用法. 例:这段代码 中间的部分共七行,可看出有这样的特点:前两行的格

JavaMail快速入门

快速入门 摘要 这篇文章介绍创建基于Java的email应用程序入门知识.假如你想创建你自己的email客户端应用程序来代替Microsoft Outlook,或者创建一个基于Web的email系统来跟Hotmail叫板,那么你可以从这里开始.从JavaMail的一个不同角度出发,该文给出了一个谈话email客户端应用程序. 在JavaMail中,你可以找到API以及其实现部分,从而用它开发功能全面的email客户端应用程序."email客户端应用程序"引用了Microsoft Out

Visual C#2005快速入门之switch语句

visual|快速入门|语句 某些时候,在嵌套使用if语句时,所有if语句看起来都非常相似,因为它们都在对一个完全相同的表达式进行求值,惟一的区别是每个if语句都将表达式的结果与一个不同的值进行比较.例如: if (day == 0) dayName = "Sunday";else if (day == 1) dayName = "Monday";else if (day == 2) dayName = "Tuesday";else if (da

Java程序员快速入门Go语言

这篇文章帮助Java程序员快速入门Go语言. 转载至 开源中国社区. http://www.oschina.net 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将详细的描述Go语言的各个构成模块,最后以一个例子来讲解Go语言与Java语言的不同点.   先来认识堆栈(例子) 为了满足大家的好奇心,我们将开始于一个麻雀虽小但五脏内全的例子,这个例子将是Stack.java的Go语言版本. 01 //实现堆栈的包集合 02 package collection