内存调试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一下

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux修改sftp端口的方法:2个地方需要修改「建议收藏」

    linux修改sftp端口的方法:2个地方需要修改「建议收藏」SSH配置文件有两个都放在/etc/ssh/ssh_config和/etc/ssh/sshd_config在ssh_config中,找到#port22,在其下面就加入port8080同时,在sshd_config中,找到#port22,在其下面就加入port8080(与上面相同)之后重启sshservicesshdrestart…

    2022年9月14日
    3
  • 让你轻松架设FTP服务器

    让你轻松架设FTP服务器你想架设你的FTP服务器吗?笔者将从IIS和第三方软件两个角度,教会你轻松架设FTP服务器的方法,让你玩转FTP服务器的架设。一、用IIS架设FTP服务器:1、设置FTP服务器:(1)设置“FTP站点”标签项:在“控制面板→管理工具→Internet服务管理器”窗口中,选中“默认FTP站点→右键→属性”,在图1的“默认FTP站点属性”框中,“IP地址”可以使用默认,端口号保持“2

    2022年7月21日
    10
  • python fillna_pandas增加一列

    python fillna_pandas增加一列fillna填充缺失值df.fillna()importpandasaspdimportnumpyasnpfromnumpyimportnanasNaNdf1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])df1

    2022年8月12日
    10
  • Xshell连接虚拟机失败的解决方法

    Xshell连接虚拟机失败的解决方法  最近这一周由于自己的xshell突然连接不到虚拟机,在网上找了很多种方法也没能解决,以至于自己在学习很多知识的时候都没能很好的去验证,去尝试。最后在求助大佬的时候终于将xshell重新连接到了虚拟机!!    以下是我对xshell连接不到虚拟机的几种方法的总结,希望对大家能有帮助:方法一:   1.首先查看利用 ifconfig命令去查看IP地址,如下图:…

    2022年9月22日
    5
  • Arcgis地理加权回归[通俗易懂]

    Arcgis地理加权回归[通俗易懂]地理加权回归做地质灾害易发性评价,结果中哪个指标是表达易发性程度的呢?然后,怎么用roc曲线进行结果精度检验呢?

    2022年10月6日
    3
  • 线性反馈移位寄存器的实现原理_线性移位寄存器序列

    线性反馈移位寄存器的实现原理_线性移位寄存器序列1、写出n阶线性反馈移位寄存器的实现过程2、假设一个GF(2)上的5阶线性反馈移位寄存器的反馈函数为f(x1,x2,x3,x4,x5)=x1+x5初始状态为10011,试写出该线性反馈移位寄存器的输出序列程序:#include#includeusingnamespacestd;voidGF(inta,intn){intb;

    2025年5月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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