前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内存调试MEMWATCH

内存调试MEMWATCH

作者头像
全栈程序员站长
发布2022-09-14 12:57:28
5930
发布2022-09-14 12:57:28
举报
文章被收录于专栏:全栈程序员必看

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

内存调试 - 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.cn/159714.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
检测工具
域名服务检测工具(Detection Tools)提供了全面的智能化域名诊断,包括Whois、DNS生效等特性检测,同时提供SSL证书相关特性检测,保障您的域名和网站健康。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档