快速业务通道

memwatch的使用(一)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-16
linux下的测试工具真是少之又少,还不好用,最近试用了memwatch,感觉网上的介绍不太好,放在这里跟大家分享 .其实大部分都是看的帮助,很多地方翻译得不好还有错,请原谅指出最好看原文.如果转载或引用,请注明我的博客地址,谢谢.

1 介绍 MemWatch Johan Lindh 编写,是一个开放源代码 C 语言内存错误检测工具.MemWatch支持 ANSI C,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneous free)、内存泄漏(unfreed memory)、溢出(Overflow)、下溢(Underflow)等等.

1.1 MemWatch的内存处理 MemWatch将所有分配的内存用0xFE填充,,如果你看到错误的数据是用0xFE填充的,那就是你没有初始化数据.例外是calloc(),它会直接把分配的内存用0填充. MemWatch将所有已释放的内存用0xFD填充(zapped with 0xFD).如果你发现你使用的数据是用0xFD填充的,那你就使用的是已释放的内存.在这种情况,注意MemWatch会立即把一个"释放了的块信息"填在释放了的数据前.这个块包括关于内存在哪儿释放的信息,以可读的文本形式存放,格式为"FBI<counter>filename(line)".如:"FBI<267>test.c(12)".使用FBI会降低free()的速度,默认是关闭的.使用mwFreeBufferInfo(1)开启. 为了帮助跟踪野指针的写情况,MemWatch能提供no-mans-landNML)内存填充.no-mans-land将使用0xFC填充.no-mans-land开启时,MemWatch转变释放的内存为NML填充状态.
1.2初始化和结束处理 一般来说,在程序中使用MemWatch的功能,需要手动添加mwInit()进行初始化,并用对应的mwTerm ()进行结束处理. 当然,如果没有手动调用mwInit(),MemWatch能自动初始化.如果是这种情形,memwatch会使用atext()注册mwTerm()用于atexit-queue. 对于使用自动初始化技术有一个告诫;如果你手动调用atexit()以进行清理工作,memwatch可能在你的程序结束前就终止.为了安全起见,请显式使用mwInit()mwTerm(). 涉及的函数主要有: mwInit() mwTerm() mwAbort()
1.3 MemWatchI/O 操作 对于一般的操作,MemWatch创建memwatch.log文件.有时,该文件不能被创建;MemWatch会试图创建memwatNN.log文件,NN01~99之间. 如果你不能使用日志,或者不想使用,也没有问题.只要使用类型为"void func(int c)"的参数调用mwSetOutFunc(),然后所有的输出都会按字节定向到该函数. ASSERT或者VERIFY失败时,MemWatch也有Abort/Retry/Ignore处理机制.默认的处理机制没有I/O操作,但是会自动中断程序.你可以使用任何其他Abort/Retry/Ignore的处理机制,只要以参数"void func(int c)"调用mwSetAriFunc().后面在1.2使用一节会详细讲解. 涉及的函数主要有: mwTrace() mwPuts() mwSetOutFunc() mwSetAriFunc() mwSetAriAction() mwAriHandler() mwBreakOut()
1.4 MemWatchC 的支持 可以将MemWatch用于C ,但是不推荐这么做.请详细阅读memwatch.h中关于对C 的支持.

2 使用

2.1 /* 默认状态设置 */ mwBreakOut: 当某些情况MemWatch觉得中断(break into)编译器更好时,就调用这个函数.如果你喜欢使用MemWatch,那么可以在这个函数上设置执行断点. 其他功能的使用,请参考源代码的说明.

memwatch的使用(二):[url]http://brantc.blog.51cto.com/410705/118221[/url]

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号