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

  • 相关阅读:
    开心菜鸟系列学习笔记------javascript(5)
    开心菜鸟系列学习笔记-------javascript(3)
    开心菜鸟学习系列-----javascript(2)
    开心菜鸟学习系列笔记-----Javascript(1)
    开心菜鸟系列----函数作用域(javascript入门篇)
    开心菜鸟系列----变量的解读(javascript入门篇)
    开心菜鸟笔记系列---正则表达式笔记(入门篇)
    开心菜鸟笔记系列---博客开篇贴!(求支持)
    在开启bin-log日志下Mysql报错
    开心菜鸟学习系列学习笔记------------nodejs util公共函数
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4272307.html
Copyright © 2020-2023  润新知