内存调试 - MEMWATCH
来源:互联网 发布:twizzlers扭扭糖淘宝 编辑:程序博客网 时间:2024/04/30 08:27
内存调试 - 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 为您显示真正导致问题的行。如果您释放一个已经释放过的指针,它会告诉您。对于没有释放的内存也一样。日志结尾部分显示统计信息,包括泄漏了多少内存,使用了多少内存,以及总共分配了多少内存。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lengxingfei/archive/2006/08/09/1040800.aspx
- 内存调试 - MEMWATCH
- 内存调试 - MEMWATCH
- 内存调试 - MEMWATCH
- 内存调试MEMWATCH
- linux 内存调试工具MEMWATCH
- linux 内存调试工具MEMWATCH
- linux 内存调试工具MEMWATCH
- 使用memwatch进行内存调试
- 内存泄露定位 - MEMWATCH
- memwatch检测内存泄露
- memwatch 内存检测工具
- linux memwatch的内存检测-double-free
- MEMWATCH 调试动态库1
- MEMWATCH 调试动态库2
- MEMWATCH 调试动态库3
- memwatch用来检测内存相关
- 用memwatch检测内存泄露
- 使用memwatch检查内存泄漏
- pb函数库之字符串操作函数
- 在windchill中的列表(如:在[首頁]標簽的下面[更新]頁面)中有個[動作]欄位,點擊此欄位中的[請參見動作]的
- SQL大全
- 使用AT命令和GPRS无线模块开发(软件)
- 在ssh中出现attempt to associate a collection with two open sessions
- 内存调试 - MEMWATCH
- PHP100的大象到了
- 在 resources 参数中指定了多次。 resources 参数不支持重复项—解决方法
- taglib-bean
- ifstream 与ofstream用法——转
- ASP.Net中“The Server tag is not well formed”问题解析
- RDS-TMC
- MES & ERP: Two Paths to Operations Management
- MC55开发之GPRS远程登陆程序的具体设计(独家整理!保证是你见过的MC55开发最全的笔记~~)