内存调试MEMWATCH

内存调试MEMWATCH
内存调试-MEMWATCH
 
MEMWATCH由JohanLindh编写,是一个开放源代码C语言内存错误检测工具,您可以自己下载它(请参阅本文后面部分的参考资料)。只要在代码中添加一个头文件并在gcc语句中定义了MEMWATCH之后,您就可以跟踪程序中的内存泄漏和错误了。MEMWATCH支持ANSIC,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneousfree)、没有释放的内存(unfreedmemo

大家好,又见面了,我是你们的朋友全栈君。

内存调试 - MEMWATCH

 

MEMWATCH 由 Johan Lindh 编写,是一个开放源代码 C 语言内存错误检测工具,您可以自己下载它(请参阅本文后面部分的参考资料)。只要在代码中添加一个头文件并在 gcc 语句中定义了 MEMWATCH 之后,您就可以跟踪程序中的内存泄漏和错误了。MEMWATCH 支持 ANSI C,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneous free)、没有释放的内存(unfreed memory)、溢出和下溢等等。

1.   下载Memwatch, http://www.linkdata.se/;

2.   解压后可以看到memwatch.c、memwatch.h、test.c等文件;

2.1 首先运行源代码中的事例程序,检测是否捕捉到内存错误,具体步骤如下:

Linux and other *nixes with gcc:

                 gcc -o test -DMEMWATCH -DMEMWATCH_STDIO test.c memwatch.c

        Windows 95, Windows NT with MS Visual C++:

                 cl -DMEMWATCH -DMEMWATCH_STDIO test.c memwatch.c

        Then simply run the test program.

                ./test

         成功运行后,会看到一个名为”memwatch.log” 的文件,里面记录了内存泄漏的具体情况。

3.    上面事例运行成功后,就可以将测试自己的代码了。

3.1 首先将memwatch.c、memwatch.h复制到被测代码中。

3.2 将源码中每个文件都包含memwatch.h;如果源码中的所有文件都用到了一个文件,也可以将其添加到该文件中。

3.3 重新编译源代码,并在gcc选项中使用 –DMEMWATCH,如果需要对出错时进行控制,可以添加-DMEMWATCH_STDIO 选项,此时调试出错时可以在标准输出上看到”Abort, Retry,Ignore?”

3.4 编译成功后,运行程序!如果操作无误,可以memwatch.log,里面记录了内存调试的具体情况。

4.   容易出现的问题

4.1 在memwatch.h之后包含string.h时,编译时提示strdup()出错!

    解决办法:可以将string.h放置在memwatch.h之前;也可以修改memwatch.h,使其包含

string.h.

4.2 运行程序后,没有出现memwatch.log文件

解决办法:在编译时可能没有定义MEMWATCH;也可能是有些文件没有包含memwatch.h;查看后解决

总结:MEMWATCH 为您显示真正导致问题的行。如果您释放一个已经释放过的指针,它会告诉您。对于没有释放的内存也一样。日志结尾部分显示统计信息,包括泄漏了多少内存,使用了多少内存,以及总共分配了多少内存。

 

还没尝试过的,mark一下

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159714.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 自定义progressbar样式_样式

    自定义progressbar样式_样式android ProgressBar 样式讲解

  • Android 系统 目录 分析「建议收藏」

    Android 系统 目录 分析「建议收藏」转自:hknote及Ophone8作者:Wanan.’s  及  O友今天要来分析一下Android文件系统的/system目录的结构。/system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下,我看来是一个真正的rootfs。他在Android手机中存放在nandflash的mtd3中,是一个yaffs2文件系统,在启动时被挂载在root

    2022年10月15日
  • java验证手机号正则表达式_Java使用正则表达式验证手机号和电话号码的方法「建议收藏」

    java验证手机号正则表达式_Java使用正则表达式验证手机号和电话号码的方法「建议收藏」一个朋友需要,所以写了这两个,话不多说,看代码中国电信号段133、149、153、173、177、180、181、189、199中国联通号段130、131、132、145、155、156、166、175、176、185、186中国移动号段134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、1…

  • svn 配置文件_svn环境配置

    svn 配置文件_svn环境配置SVN配置文件说明svnserve是SVN自带的一个轻型服务器,SVN用户端通过使用以svn://或svn+ssh://为前缀的URL来访问svnserve服务器,实现远程访问SVN版本库。svnserve可以通过配置文件来设置用户和口令,以及按路径控制版本库访问权限。本文详细分析了svnserve配置文件格式,并说明如何使用配置文件控制版本库访问权限。一、svnserve配置文件概述svnserve配置文件通常由以下3个文本文件组成:svn服务配置文件,该文件版…

  • 死磕带通滤波器

    死磕带通滤波器带通滤波器的作用与陷波器类似,带通滤波器在数字电源控制领域有重要作用。比如在三相LCL逆变器的谐振抑制控制方面,通过带通滤波器可以提取谐振点附近的频谱做进一步的控制策略。在有源电力滤波器利用带通滤波器可以提取电网信号的基波频率从而做进一步的控制。带通滤波器传递函数带通滤波器的传递函数是:h(s)=AwoBss2+Bs+wo2h(s)=\frac{Aw_oBs}{s^2+Bs+w_o^2}h(s)=s2+Bs+wo2​Awo​Bs​其中,wow_owo​是带通的“中心频率”,也就是想要通过频率

  • ❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)[通俗易懂]

    ❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)[通俗易懂]文章目录强烈推荐系列教程,建议学起来!!一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置4.2手动添加镜像源4.3永久配置镜像源五.插件安装(比如汉化?)5.1自动补码神器第一款5.2汉化pycharm5.3其它插件六.美女背景七.自定义脚本开头八、这个前言一定要看九、python入门十、python缩进十一、Python注释1.单行注释2.多行注释十二、Python变量1.变量定义理解2.变量名命名3.分

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号