生活随笔
收集整理的這篇文章主要介紹了
dmalloc用法快速入门
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文鏈接
常用內(nèi)存泄露檢測(cè)手段有
- 1?mtrace
- 2?memwatch
- 3?mpatrol
- 4?dmalloc
- 5?dbgmem
- 6?valgrind
- 7?Electric Fence
dmalloc是一個(gè)簡(jiǎn)單易用的C/C++內(nèi)存leak檢查工具,以一個(gè)運(yùn)行庫(kù)的方式發(fā)布。
dmalloc能夠檢查出直到程序運(yùn)行結(jié)束還沒(méi)有釋放的內(nèi)存,并且能夠精確指出在
哪個(gè)源文件的第幾行。
dmalloc 主頁(yè):?http://dmalloc.com
支持的平臺(tái):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 ?
設(shè)置環(huán)境變量:
對(duì)于 Bash, ksh, and zsh (http://www.zsh.org/), 在 `.bashrc', `.profile', or `.zshrc'
文件中加入一行 ( -b 參數(shù)表示針對(duì)Bash的輸出):
function dmalloc { eval `command dmalloc -b $*`; }
然后重新登陸用戶(hù),或者執(zhí)行: source ~/.bashrc 或 source ~/.profile
接下面執(zhí)行:
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
執(zhí)行:
./a.out
運(yùn)行上面的命令會(huì)在當(dāng)前目錄下生成 logfile文件,查看logfile的內(nèi)容如下:
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 ?
那么,哪個(gè)地方的內(nèi)存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; }
轉(zhuǎn)載于:https://www.cnblogs.com/wangkangluo1/archive/2012/06/05/2535509.html
總結(jié)
以上是生活随笔為你收集整理的dmalloc用法快速入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。