博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Memwatch
阅读量:7235 次
发布时间:2019-06-29

本文共 1547 字,大约阅读时间需要 5 分钟。

Memwatch简介

在三种检测工具当中,设置最简单的算是memwatch,和dmalloc一样,它能检测未释放的内存、同一段内存被释放多次、位址存取错误及不当使用未分配之内存区域。请往下载最新版本的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单位)。

转载地址:http://vjlfm.baihongyu.com/

你可能感兴趣的文章
CSS 水平垂直居中
查看>>
机器学习实战_分类(一)
查看>>
angular 路由 Router
查看>>
devops之路第一篇(gitlab搭建)
查看>>
【跃迁之路】【436天】刻意练习系列195—Java基础练习(继承)(2018.04.17)
查看>>
NPM vs Yarn 备忘手册
查看>>
初识LVM及ECS上LVM分区扩容
查看>>
Vue作为组件在前端项目中的应用技巧
查看>>
python实现一个简单的并查集
查看>>
阻止微信浏览器下拉滑动效果(ios11.3 橡皮筋效果)
查看>>
支持所有JavaScript运行时的HTTP网络库-Fly.js
查看>>
【Sublime Text3 】——SublimeTmpl代码模板
查看>>
Java对象的使用
查看>>
【350天】我爱刷题系列109(2018.01.21)
查看>>
每个程序员都应该读《Unix编程艺术》
查看>>
彻底搞懂JavaScript中的继承
查看>>
python奇遇记:数据结构窥探3
查看>>
iOS-高性能
查看>>
无所遁形
查看>>
动态规划(2)——01背包
查看>>