linux memwatch的内存检测-double-free

1 memwatch是什么?
  memwatch是C语言的内存检测器。除了检测内存的功能外,它同样可以做其它的一些事情,而我们主要还是在于讲述它的基本功能。如果你真的想要知道所有相关的具体细节,可详细查看头文件memwatch.h以及源代码。那里面有具体且详细的注释说明。
它使用C于处理器的功能,memwatch使用它自己定义的功能函数取代所有在你的程序中用ANSI C定义的内存分配函数,memwatch的内存分配函数包含了了所有的分配记录信息。
2 memwatch功能
 a.它主要有基本的内存管理函数
   mwMalloc()
   mwFree()
   mwCalloc()
   mwRealloc()
 b.MemWatch能够检测的功能包括
        双重释放(double-free)、
        错误释放(erroneous free)、
        内存泄漏(unfreed memory)、
        溢出(Overflow)、
        下溢(Underflow)等
        而目前我们只针对double-free进行了验证;
  对于unfreed功能,需要在主程序结束前添加CHECK()函数进行检查,这一点嵌入式系统并不特别适用,因此,在强行关闭程序时有可能会出现大量的unfreed信息,请忽略。
  使用MemWatch功能需要在待检测源文件中引用memwatch.h,若没有添加有可能出现野指针(wild-free)信息;如果申请内存时使用了malloc而释放内存时使用了mwfree接口,有可能会出现错误释放(wild-free)信息,遇到wild-free现象时请先排除以上两场景。

3 编译
    当编译时, 相让memwatch起作用, 编译是加上-DMEMWATCH
4 memwatch.log内容
    在正常操作的情况下,memwatch会创建一个名叫memwatch.log的文件。但有的时候,memwatch.log文件并不能被创建。此时,memwatch会尝试创建命名类似memwatNN.log的文件,其中NN是01到99之间的数字。如果还是失败,则没有log文件。
    a、检测启动时间:
    如:
    Started at Thu Nov  1 14:56:31 2012
    Started at Thu Nov  1 14:56:31 2012
    b、状态搜集器的信息及宏定义信息,可忽略。
    如:
    __STDC__ 64-bit mwDWORD==(unsigned long
    mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32

    c、MemWatch捕获的错误信息
    如:
    double-free: <1385> menuChannelSet.c(529), 0x11a4130 was freed from mwTest.c(781)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值