`

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下载

分享到:
评论

相关推荐

    C/C++ 内存泄露检测工具 memwatch2.69

    `memwatch`是一个实用的内存泄露检测工具,专为C/C++程序员设计,帮助找出程序运行过程中未释放的内存块。 `memwatch-2.69`版本提供了对内存泄漏的详细跟踪和报告功能,它通过在内存分配和释放操作中插入额外的代码...

    Linux 内存泄露查找

    在进行Linux C语言编程时,内存管理一直是程序员关注的重点之一。特别是在动态内存分配场景下,如果不妥善处理,很容易出现内存泄露的问题。内存泄露不仅会消耗系统资源,还可能导致应用程序性能下降甚至崩溃。因此...

    内存泄露检测工具

    在Linux环境中,有多种工具可以帮助开发者检测和定位内存泄露问题,其中MEMWATCH和DMALLOC是两个常用的选择。 **MEMWATCH** MEMWATCH是一款功能强大的内存调试工具,它可以在程序运行时实时监控内存分配和释放的...

    memwatch

    **标题解析:** "memwatch" 是一个针对C/C++编程语言的内存泄漏检测工具,其版本为2.7.1。 **描述详述:** MEMWATCH 2.7.1是一个跨平台的内存泄漏检测解决方案,适用于支持ANSI C标准的任何编译器。这意味着不论你...

    内存检测工具 内存问题检测就用它-华清远见.docx

    5. **Memwatch**:这是一个轻量级的内存泄漏检测工具,可以跟踪内存分配和释放。 6. **Dr.Memory**:由DynamoRIO项目提供,可以检测内存泄漏、越界、双重释放等,支持Windows和Linux。 7. **Electric Fence**:它...

    内存检测工具 内存问题检测就用它-华清远见.pdf

    Memwatch是一个简单的内存泄漏检测工具,可检测内存泄漏和双释放。 6. **Dr.Memory** Dr.Memory是一款功能全面的内存调试器,能检测多种内存错误。 7. **Electric Fence** Electric Fence在内存分配和释放时...

    什么是内存泄漏以及什么是野指针2009.doc

    **内存泄漏检测工具** 为了检测和定位内存泄漏,有许多工具可供选择,如: 1. **ccmalloc**:适用于Linux和Solaris的内存泄漏和malloc调试库。 2. **Dmalloc**:Debug Malloc Library,适用于多种平台。 3. **...

    LinuxC编程侦测记忆体溢出工具mtrace[参照].pdf

    mtrace是一个简单易用的内存泄漏检测工具,尤其适用于那些使用动态内存分配的C程序。 mtrace的使用通常涉及到以下几个步骤: 1. **环境变量设置**:在运行包含mtrace的程序之前,需要设置`MALLOC_TRACE`环境变量来...

    Linux下可执行文件的动态内存检测设计与实现.pdf

    特别是在C/C++这类高级编程语言中,动态内存的分配和回收管理不当,经常会引发内存泄漏、越界写入、野指针释放等问题。因此,设计一个有效的动态内存检测工具,对于提高软件的稳定性和可靠性至关重要。 在Linux操作...

    unix c学习指南

    - **Memory Leak检测工具**:如memwatch、yamd等,用于检测内存泄漏等问题。 - **其他工具**: - **Vi/Vim编辑器**:常用的文本编辑器,适合进行编程和脚本编写。 - **NetTerm**:用于远程连接的网络终端软件。 ...

    Unix和Linux下C语言学习指南.docx

    此外,memwatch和yamd等内存检测工具可以检测内存泄漏和缓冲区溢出等问题,确保程序的稳定性和安全性。 在Unix环境下,vi或vim是经典的文本编辑器,掌握其基本操作对于日常编程非常有用。如果你需要更高级的功能,...

    c语言学习指南--基础学习类

    此外,还有内存检测工具,如`memwatch`和`yamd`,它们可以帮助你检测内存泄漏和缓冲区溢出等问题。 除了这些工具,熟悉文本编辑器如vi或vim也非常重要,尤其是在UNIX环境中。尽管vi可能需要一些时间来适应,但熟练...

    Unix C学习指南

    另外,memwatch和yamd等内存工具能帮助检测内存泄漏和缓冲区溢出问题。对于文本编辑,vi或vim是Unix下的标准编辑器,学习并熟练使用它们对Unix编程很有帮助。此外,netterm作为网络终端软件,secure shell用于安全...

Global site tag (gtag.js) - Google Analytics