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 testmemwatch输出結果

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(longnum_of_byte)函数来限制程式的heap memory大小(以byte单位)。

最详细的使用说明(包括优点缺点,运行原理等)已在README中列出,本人强烈建议各位读者参考该文件。

Memwatch简介相关推荐

  1. Linux内存调试工具初探-MEMWATCH

    C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权.这种自由可能会导致严重的内存管理问题,可能导致程序崩溃或随时间的推移导致性能降级. 内存泄漏(即 malloc()  ...

  2. Linux C 编程内存泄露检测工具(二):memwatch

    Memwatch简介 在三种检测工具当中,设置最简单的算是memwatch,和dmalloc一样,它能检测未释放的内存.同一段内存被释放多次.位址存取错误及不当使用未分配之内存区域.请往http:// ...

  3. memwatch使用

    一.简介 memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放(double-free).错误释放(erroneous free).没有释放的内存(unfreed memory).溢出(Ov ...

  4. 使用memwatch跟踪linux内存泄漏

    参考: http://blog.csdn.net/kehyuanyu/article/details/25217907 http://blog.sina.com.cn/s/blog_590be5290 ...

  5. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  6. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  7. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  8. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  9. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

最新文章

  1. 时间序列(七): 高冷贵族: 隐马尔可夫模型
  2. xamarin UWP中MessageDialog与ContentDialog的区别
  3. 45K!拿下 AI 技术岗,这些知识点全考了!
  4. switch的处理方法
  5. linux7清空都有a的文件,linux用户和组管理
  6. java 初始化和清楚_浅谈Java中的初始化和清理
  7. android 原型模式,原型模式-下拉刷新的全局设置
  8. NLP笔记之文本聚类
  9. 基于matlab的时频特征分析,基于MATLAB的时频分析在心电信号分析中的研究与应用...
  10. servlet+jsp面试题
  11. Java前后端分离项目部署到服务器
  12. linux获取本地ip命令,Shell获取当前主机ip地址
  13. 使用Kolla镜像Openstack多节点快速搭建部署
  14. css3制作菱形图片
  15. Exception in thread “main“ java.lang.ArrayStoreException解决方案(记录一下)
  16. 树莓派离线语音唤醒snowboy
  17. 什么是JavaBean、bean?
  18. <数据结构>倒拔二叉树
  19. 达梦客户端工具的使用
  20. 7个靠谱的Windows软件下载网站,个个「纯净、安全、无捆绑」!

热门文章

  1. steam怎么设置邮箱令牌_steam收不到邮箱令牌验证码怎么办 这些知识你不一定知道...
  2. 失败成就伟大:谷歌的23个失败案例
  3. 常见分布式算法的介绍
  4. Linux中gcc4.8.5升级到gcc5.4.0用已经编译好的安装包升级(重点是不用编译安装,可以更省时)
  5. ren域名有价值吗?值不值得投资?ren域名的应用范围有哪些?
  6. 【深度学习小常识】CPU(中央处理器)和GPU(图像处理器)的区别
  7. 前端如何调用后端接口
  8. PlatON和IRISnet结成战略合作伙伴,共同开拓区块链企业服务市场
  9. Python PyCharm Django 搭建web开发环境
  10. EF Data Operation With Async Task