zoukankan      html  css  js  c++  java
  • 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单位)。

  • 相关阅读:
    KnockoutJS 3.X API 第五章 高级应用(4) 自定义处理逻辑
    KnockoutJS 3.X API 第五章 高级应用(3) 虚拟元素绑定
    KnockoutJS 3.X API 第五章 高级应用(2) 控制后代绑定
    KnockoutJS 3.X API 第五章 高级应用(1) 创建自定义绑定
    KnockoutJS 3.X API 第四章(14) 绑定语法细节
    KnockoutJS 3.X API 第四章(13) template绑定
    KnockoutJS 3.X API 第四章 表单绑定(12) selectedOptions、uniqueName绑定
    KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
    KnockoutJS 3.X API 第四章 表单绑定(10) textInput、hasFocus、checked绑定
    KnockoutJS 3.X API 第四章 表单绑定(9) value绑定
  • 原文地址:https://www.cnblogs.com/ahuo/p/2620805.html
Copyright © 2011-2022 走看看