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
- tar zxvf dmalloc-5.5.2.tgz
- cd dmalloc-5.5.2
- ./configure
- make
- 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
接下面执行:
- 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
- 1214894489: 2: Dmalloc version '5.5.2' from 'http://dmalloc.com/'
- 1214894489: 2: flags = 0x4e48503, logfile 'logfile'
- 1214894489: 2: interval = 100, addr = 0, seen # = 0, limit = 0
- 1214894489: 2: starting time = 1214894489
- 1214894489: 2: process pid = 9560
- 1214894489: 2: Dumping Chunk Statistics:
- 1214894489: 2: basic-block 4096 bytes, alignment 8 bytes
- 1214894489: 2: heap address range: 0xb8020000 to 0xb8029000, 36864 bytes
- 1214894489: 2: user blocks: 1 blocks, 4043 bytes (10%)
- 1214894489: 2: admin blocks: 8 blocks, 32768 bytes (89%)
- 1214894489: 2: total blocks: 9 blocks, 36864 bytes
- 1214894489: 2: heap checked 1
- 1214894489: 2: alloc calls: malloc 2, calloc 0, realloc 0, free 0
- 1214894489: 2: alloc calls: recalloc 0, memalign 0, valloc 0
- 1214894489: 2: alloc calls: new 0, delete 0
- 1214894489: 2: current memory in use: 11 bytes (2 pnts)
- 1214894489: 2: total memory allocated: 11 bytes (2 pnts)
- 1214894489: 2: max in use at one time: 11 bytes (2 pnts)
- 1214894489: 2: max alloced with 1 call: 6 bytes
- 1214894489: 2: max unused memory space: 53 bytes (82%)
- 1214894489: 2: top 10 allocations:
- 1214894489: 2: total-size count in-use-size count source
- 1214894489: 2: 6 1 6 1 dm_test.c:71
- 1214894489: 2: 5 1 5 1 dm_test.c:69
- 1214894489: 2: 11 2 11 2 Total of 2
- 1214894489: 2: Dumping Not-Freed Pointers Changed Since Start:
- 1214894489: 2: not freed: '0xb8028fc8|s1' (6 bytes) from 'dm_test.c:71'
- 1214894489: 2: not freed: '0xb8028fe8|s1' (5 bytes) from 'dm_test.c:69'
- 1214894489: 2: total-size count source
- 1214894489: 2: 6 1 dm_test.c:71
- 1214894489: 2: 5 1 dm_test.c:69
- 1214894489: 2: 11 2 Total of 2
- 1214894489: 2: ending time = 1214894489, elapsed since start = 0:00:00
那么,哪个地方的内存leak就一目了然了。
//====== dm_test.c 源代码 =============
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #ifdef DMALLOC
- #include <dmalloc.h>
- #endif
- int main(int argc, char **argv)
- {
- char *str;
- str = malloc(5);
- str = malloc(6);
- return 0;
- }
dmalloc用法快速入门的更多相关文章
- sass用法快速入门
1.@mixin用法 (混合样式) 2.定义变量用$ (可作为全局变量使用) 命名规范 —— 遵守语义化命名:lg-大号.md-中号.base-基本号.sm-小号.mini-超小号 $font ...
- Swift语言快速入门
Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- RequireJS 快速入门
说明:本文只提供快速入门内容,方便快速进入实战状态.更高级的配置,请参考官网文档. 当初之所以使用 RequireJS 等工具,是因为想提高js的加载速度,避免不必要的堵塞.但通过一段时间的使用, ...
- Linux快速入门03-系统管理
这部分将涉及常用的各类linux命令和一些系统高级管理特性,尤其是shell script的创建,这部分在系统自动化运维时会很有作用. Linux系列文章 快速入门系列--Linux--01基础概念 ...
- Toad快速入门
Toad快速入门 在实际中,Toad的用户很少用到其强大的新特性,同时新用户的摸索式熟悉Toad往往花费更多的时间.为此,铸锐数码为每个新购买Toad客户,提供两人次的在线培训服务,帮助客 ...
- HTML快速入门4
七.表单 1. 概述 建立交互式的站点,需要使用 HTML 表单,它可以让用户提供信息,并对此作出处理.可以建立类似 复选框.单选按钮及文本框的控件. 掌握表单的使用对 Active Server P ...
- Qt 动画快速入门(一)
Qt-4.6动画Animation快速入门三字决 Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序.不必像以前的版本一样,所有的控件都枯燥的呆在伟 ...
- 跨浏览器复制神器 ZeroClipboard 2.x快速入门详解
有些时候,我们希望让用户在网页上完成某个操作就能自动将指定的内容复制到用户计算机的剪贴板中.但是出于安全原因,大多数现代浏览器都未提供通用的剪贴板复制接口(或即便有,也默认被禁用).只有IE浏览器可以 ...
- Spring Boot 快速入门
Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 今天给大家介绍一下Spring Boot MVC ...
随机推荐
- codeforces 204E. Little Elephant and Strings(广义后缀自动机,Parent树)
传送门在这里. 大意: 给一堆字符串,询问每个字符串有多少子串在所有字符串中出现K次以上. 解题思路: 这种子串问题一定要见后缀自动机Parent树Dfs序统计出现次数都是套路了吧. 这道题统计子串个 ...
- 【Good Bye 2017 B】 New Year and Buggy Bot
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举一下全排列.看看有多少种可以到达终点即可. [代码] #include <bits/stdc++.h> using ...
- 设计模式六大原则(一):单一职责原则(Single Responsibility Principle)
单一职责(SRP)定义: 不要存在多于一个导致类变更的原因,通俗的说,即一个类只负责一项职责. 问题由来: 类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可 ...
- PHP用socket连接SMTP服务器发送邮件
PHP用socket连接SMTP服务器发送邮件 PHP用socket连接SMTP服务器发送邮件学习实验记录: 分析与SMTP会话的一般流程 1. HELO XXX \r\n //XXX就是自己起个名字 ...
- AAC编解码
AAC编码可以使用faac /** 初始化 @param sampleRate 音频采样率 @param channels 通道数 @param bitSize 音频采样精度 16 */ - (voi ...
- 在linux环境下增加别名
编辑.cshrc文件:gvim ~/.cshrc 增加要添加的别名,例如:alias la 'ls -a' qw保存退出 source ~/.cshrc即可生效
- 【例题 6-21 UVA - 506】System Dependencies
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 记录每个物品它的依赖有哪些,以及它被哪些东西依赖就可以了. 显式安装的东西不能被隐式删除删掉(就是remove item,然后删除i ...
- 【2017 Multi-University Training Contest - Team 7 && hdu 6121】Build a tree
[链接]点击打开链接 [题意] 询问n个点的完全k叉树,所有子树节点个数的异或总和为多少. [题解] 考虑如下的一棵k=3叉树,假设这棵树恰好有n个节点. 因为满的k叉树,第i层的节点个数为k^(i- ...
- Ubuntu 12.04 64bit GCC交叉编译器制作 原创
...
- Anaconda的安装
Windows下Anaconda的安装和简单使用 Anaconda is a completely free Python distribution (including for commercial ...