Linux C 编程内存泄露检測工具(二):memwatch

Memwatch简单介绍

在三种检測工具其中,设置最简单的算是memwatch,和dmalloc一样,它能检測未释放的内存、同一段内存被释放多次、位址存取错误及不当使用未分配之内存区域。请往http://www.linkdata.se/sourcecode.html下载最新版本号的Memwatch。

安装及使用memwatch

非常幸运地,memwatch根本是不须要安装的,由于它仅仅是一组C程序代码,仅仅要在你程序中添?memwatch.h,编译时加上-DMEMWATCH -DMW_STDIO及memwatch.c就能使用memwatch,比如:

gcc -DMEMWATCH -DMW_STDIO test.c memwatch.c -o test

memwatch输出結果

memwatch的输出文件名为memwatch.log,并且在程序运行期间,全部错误提示都会显示在stdout上,假设memwatch未能写入以上文件,它会尝试写入memwatchNN.log,而NN介于01至99之间,若它仍未能写入memwatchNN.log,则会放弃写入文件。

我们引用第一篇(mtrace)中所使用过的有问题的代码:

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <memwatch.h>

int main() {

char *hello;

setenv("MALLOC_TRACE", "output", 1);

mtrace();

if ((hello = (char *) malloc(sizeof(char))) == NULL) {

perror("Cannot allocate memory.");

return -1;

}

return 0;

}

然后在shell中输入下面编译指令:

gcc -DMEMWATCH -DMW_STDIO test.c memwatch.c -o test

memwatch.log的內容例如以下:

============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============

Started at Sat Jun 26 22:48:47 2004

Modes: __STDC__ 32-bit mwDWORD==(unsigned long)

mwROUNDALLOC==4 sizeof(mwData)==32 mwDataSize==32

Stopped at Sat Jun 26 22:48:47 2004

unfreed: <1> test.c(9), 1 bytes at 0x805108c    {FE .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .}

Memory usage statistics (global):

N)umber of allocations made: 1

L)argest memory usage      : 1

T)otal of all alloc() calls: 1

U)nfreed bytes totals      : 1

文件指出,在test.c被运行到第9行时所分配的内存仍未被释放,该段内存的大小为1 byte。

Memwatch使用注意

Memwatch的长处是无需特別配置,不需安装便能使用,但缺点是它会拖慢程序的执行速度,尤其是释放内存时它会作大量检查。但它比mtrace和dmalloc多了 一项功能,就是能模拟系统内存不足的情況,使用者仅仅需用mwLimit(long num_of_byte)函数来限制程式的heap memory大小(以byte单位)。

最具体的使用说明(包含长处缺点,执行原理等)已在README中列出,本人强烈建议各位读者參考该文件。

相关链接:

- Memwatch下载

时间: 2024-10-21 01:55:20

Linux C 编程内存泄露检測工具(二):memwatch的相关文章

C++内存泄露检測原理

转自:http://hi.baidu.com/jasonlyy/item/9ca0cecf2c8f113a99b4981c 本文针对 linux 下的 C++ 程序的内存泄漏的检測方法及事实上现进行探讨.当中包含 C++ 中的 new 和 delete 的基本原理,内 存检測子系统的实现原理和详细方法,以及内存泄漏检測的高级话题.作为内存检測子系统实现的一部分,提供了一个具有更好的使用特性的相互排斥体 (Mutex)类. 1.开发背景 在 windows 下使用 VC 编程时,我们通常须要 DE

内存泄露检測及cvClone造成的泄露

调了几个小时,到最后发现内存泄露的原因是opencv的cvClone函数,採用cvCopy函数后,问题解决. vs2010使用vld进行内存泄露检測 (1) 下载vld工具 (2) 将D:\Program Files\Visual Leak Detector\include;D:\Program Files\Visual Leak Detector\lib\Win32;分别增加include和lib的路径 (3) 将D:\Program Files\Visual Leak Detector\bi

Visual C++ 2012/2013的内存溢出检測工具

在过去,每次编写C/C++程序的时候,VLD差点儿是我的标配.有了它,就能够放心地敲代码,随时发现内存溢出. VLD最高可支持到Visual Studio 2012.不知道以后会不会支持Visual Studio 2013,但反正眼下是不支持的. 相关的讨论见:https://vld.codeplex.com/discussions/471214 那么在Visual Studio 2013下还是老老实有用MFC的内存溢出检測工具,或者用WinDBG吧. 推荐一篇文章:<Memory Leak D

Linux C 编程内存泄露检测工具(一):mtrace

前言 所有使用动态内存分配(dynamic memory allocation)的程序都有机会遇上内存泄露(memory leakage)问题,在Linux里有三种常用工具来检测内存泄露的情況,包括: mtrace dmalloc memwatch 1. mtrace mtrace是三款工具之中是最简单易用的,mtrace是一个C函數,在<mcheck.h>里声明及定义,函数原型为: void mtrace(void); 其实mtrace是类似malloc_hook的malloc handle

LeakCanary:简单粗暴的内存泄漏检測工具

差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内存泄漏是指因为疏忽或者错误造成程序未能释放已经不再使用的内存,内存泄漏不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误失去了对于这段内存的控制.因而造成内存的浪费. 内存泄漏和内存溢出是两码事,不要混淆,内存溢出通俗的讲就是内存不够用,如今的仅仅能手机内存越来越大,内存溢出的情况不

Linux下C++内存泄露检测工具

下载安装:http://blog.csdn.net/wanglin754/article/details/7194145 下载地址:http://www.valgrind.org/downloads/current.html#current 安装valgrind tar jxvf valgrind-3.7.0.tar.bz2             注意这里的参数里加了j,表示有bz2属性 cd valgrind-3.7.0 ./configure make make install make

Visual C++内存泄露检测—VLD工具使用说明[转]

Visual C++内存泄露检测—VLD工具使用说明 一.        VLD工具概述 Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号: 可以得到泄露内存的完整数据: 可以设置内存泄露报告的级别:并且是开源免费的. 二.        VLD下载 http://www.codeproject.com/tools/visualleakdetector.as

Linux Kernel 模块内存泄露查找 (2)

在之前的一篇博文<<Linux Kernel模块内存泄露的一种查找思路>>中,我介绍了一种查找内核内存泄露的一种方法.这不才几个月,又有客户埋怨:使用了产品5天左右后,Suse服务器由于内存耗尽而Crash.O My God,不会吧,在我机器上跑的好好的哇(程序员常用名言 嘿嘿). 那么就让我们一起来看看,苦逼的博主是如何确定问题并且找到问题的.... 一. 确定问题 第一步,我们要做的是,确定这个问题和产品的Kernel模块有关系.首先根据客户描述,如果停止我们产品,则不会出现内

Visual C++内存泄露检测—VLD工具使用说明 .

1.VLD工具概述 Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号: 可以得到泄露内存的完整数据: 可以设置内存泄露报告的级别:并且是开源免费的. 2.VLD下载 http://www.codeproject.com/tools/visualleakdetector.asp 本文后附有vld1.0的工具包,下载解包后就可使用. 3.VLD安装 方法一: 解