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

Linux C 编程内存泄露检测工具(二):memwatch相关推荐

  1. Linux内核态内存泄露检测工具——Kmemleak

    我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1 ...

  2. 几种内存泄露检测工具的比较

    概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,内存泄漏是常见的问题.当以前分配的一片内存不再需要使用或无法访问时,但是却 ...

  3. Ubuntu下内存泄露检测工具Valgrind的使用

    在VS中可以用VLD检测是否有内存泄露,可以参考http://blog.csdn.net/fengbingchun/article/details/44195959,下面介绍下Ubuntu中内存泄露检 ...

  4. Linux环境下内存泄露检测

    linux下内存泄漏检测工具valgrind 该工具可以检测下列与内存相关的问题 : 未释放内存的使用 对释放后内存的读/写 对已分配内存块尾部的读/写 内存泄露 不匹配的使用malloc/new/n ...

  5. 精准 iOS 内存泄露检测工具

    MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22   |   zepo   |   23 Comments 背景 平常我们都会用 Instrument 的 Lea ...

  6. Visual Studio内存泄露检测工具

    使用简介 在写程序的过程中,难免会遇到内存泄露的时候,这个时候如果手工查找内存泄露,不说方法没有通用的,就是真的要自己手工查找也是很耗时间和精力的.诚然,我们可以借助一些工具,而且我们还会惊奇地发现这 ...

  7. Linux C/C++ 内存泄漏检测工具:Valgrind - 张宴的博客 - Web系统架构与底层研发

    Linux C/C++ 内存泄漏检测工具:Valgrind - 张宴的博客 - Web系统架构与底层研发 Linux C/C++ 内存泄漏检测工具:Valgrind - 张宴的博客 - Web系统架构 ...

  8. linux 内存泄露检测工具——valgrind

    valgrind是linux下一个可用调试.查看内存泄露的工具,其官方网站:http://www.valgrind.org/ 使用时可用命令: valgrind -v  --leak-check=fu ...

  9. 内存泄露检测工具比较

    From: http://blog.163.com/zhuang_qianxin/blog/static/29765138201051092529107/ 1.     ccmalloc-Linux和 ...

最新文章

  1. 修改shape数据 小数位数_【数据管理】Excel实用精华
  2. 软件构造学习笔记-第十四周、十五周
  3. [css] 移动端页面不满一屏时如何实现满屏背景?
  4. 使用正则把数字前面的符号替换_正则表达式(一) 基本表达式
  5. 柔性体没有应变_边坡防护终结篇!柔性防护系统(主被动网)知识总结!
  6. Make GNN Great Again: GNN 上的预训练和自监督学习
  7. 原来你是这样的JAVA[01]-基础一瞥
  8. python菜鸟教程网-Python JSON
  9. PR转场预设 放大特效带有重影效果的PR视频转场预设
  10. hello world你知多少------300种编程语言中的hello world程序汇
  11. 《百度中小学人工智能课程》预计9月进课堂;AI医疗市场未来营收规模或达万亿以上...
  12. 《唐诗三百首》中的童年记录
  13. ABP理论学习之实体类
  14. centos7.9-kvm-ESXi相关操作
  15. 006_STM32程序移植之_SYN6288语音模块
  16. linux下repo是什么文件夹,yum的repo文件详解、以及epel简介、yum源的更换
  17. 使用电脑浏览器获取狗东账号cookie
  18. Java运行环境—jdk下载及安装步骤
  19. 中国传感器制造行业发展动态与前景趋势分析报告2022-2028年
  20. 单招计算机专业的自我介绍,软件技术单招面试自我介绍

热门文章

  1. 开发多商家商城系统的功能优势
  2. clr 面试_C# 常见面试问题汇总
  3. “富贵树”身价十五万,湖南小伙返乡创业,一年卖出800多万
  4. CTF中编码与加解密总结
  5. CDH5.15离线搭建简易版集群(完整版)
  6. python for x in range(0,10) 例如使用python打印9*9乘法表
  7. 电脑游戏业编年史之十二──叛逆
  8. Python_tkinter(标签Lebal)
  9. 2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
  10. 函数概念与特性——反函数、复合函数