Linux C 编程内存泄露检测工具(二):memwatch
来源:互联网 发布:域名被攻击解决办法 编辑:程序博客网 时间:2024/04/29 20:21
Memwatch简介
在三种检测工具当中,设置最简单的算是memwatch,和dmalloc一样,它能检测未释放的内存、同一段内存被释放多次、位址存取错误及不当使用未分配之内存区域。请往http://www.linkdata.se/sourcecode.html下载最新版本的Memwatch。
安装及使用memwatch
很幸运地,memwatch根本是不需要安装的,因为它只是一组C程序代码,只要在你程序中加入memwatch.h,编译时加上-DMEMWATCH -DMW_STDIO及memwatch.c就能使用memwatch,例如:
memwatch输出結果
memwatch的输出文件名称为memwatch.log,而且在程序执行期间,所有错误提示都会显示在stdout上,如果memwatch未能写入以上文件,它会尝试写入memwatchNN.log,而NN介于01至99之间,若它仍未能写入memwatchNN.log,则会放弃写入文件。
我们引用第一篇(mtrace)中所使用过的有问题的代码:
#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中输入以下编译指令:
memwatch.log的內容如下:
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(long num_of_byte)函数来限制程式的heapmemory大小(以byte单位)。
最详细的使用说明(包括优点缺点,运行原理等)已在README中列出,本人强烈建议各位读者参考该文件。
- Linux C 编程内存泄露检测工具(二):memwatch
- Linux C 编程内存泄露检测工具(二):memwatch
- Linux C 编程内存泄露检测工具(二):memwatch
- Linux C 编程内存泄露检测工具(二):memwatch
- Linux C 编程内存泄露检测工具(二):memwatch
- Linux C 编程内存泄露检测工具:memwatch
- Linux C 编程内存泄露检测工具:memwatch
- Linux C 编程内存泄露检测工具
- Linux C 编程内存泄露检测工具:mtrace
- Linux C内存泄露检测工具
- Linux C内存泄露检测工具
- Linux C内存泄露检测工具
- Linux C内存泄露检测工具
- linux C内存泄露检测工具
- Linux C内存泄露检测工具
- Linux C内存泄露检测工具
- Linux C内存泄露检测工具
- Linux C 编程内存泄露检测工具(一):mtrace
- Linux C 编程内存泄露检测工具(一):mtrace
- 如何在java并发程序中调用webservice
- Table 例子
- 博弈问题
- 杭电1096
- Linux C 编程内存泄露检测工具(二):memwatch
- 杭电1096
- AIDL demo
- 北京学生落户天津,如何取户口卡
- eclipse开发erlang
- oracle卸载完整版
- javascript冒泡和捕获
- emule编译 vs2005+win7+最新版本电驴
- 建立,删除oracle任务