MEMWATCH 调试动态库1

原创 2016年08月31日 12:05:25

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

        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博客,20lengxingfei的专栏 - CSDN博客.mht

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
阅读全文
版权声明:本文为博主原创文章,转载请注明出处。

MEMWATCH 调试动态库3

MEMWATCH 调试动态库3 (2011-02-24 10:33:08)[编辑][删除]标签: 调试 内存错误 memwatch 调试动态库 it分类: linux    下边是一个调试动态库的例子...
  • chituhuan
  • chituhuan
  • 2016年08月31日 12:05
  • 237

MEMWATCH 调试动态库2

下面是一个memwatch使用的例子:1.root@ubuntu:~/wanghuan/memwatch# cat test.c#include #include #include "memwatch...
  • chituhuan
  • chituhuan
  • 2016年08月31日 12:05
  • 244

vs调试动态库的方法(图解)

首先 ,dll 是以MFC的方式生成的,并且为了在调试dll时方便,我把dll和测试程序(一个控制台类型,一个MFC类型)都建在了一个工程下,这样可以在修改dll时通过下面的步骤设置生成dll的输出目...
  • sbfksmq
  • sbfksmq
  • 2016年06月17日 18:43
  • 3451

dmalloc的使用

dmalloc到/usr/local/bin/目录下。  (6) 设置环境变量: 对于 Bash, ksh, and zsh (http://www.zsh.org/), 在 `.bashrc',...
  • bamboolsu
  • bamboolsu
  • 2015年01月22日 12:26
  • 1035

Qt动态库调试方法2

之前写过一个Qt动态库调试方法的博客, 那种方法应用的场景是,在没有调用动态库的主程序的代码的情况下对与动态库进行调试。 但也存在许多问题,比如不能准确的确定程序崩溃的地方。 今天讲的方...
  • u012199908
  • u012199908
  • 2016年02月23日 14:30
  • 1039

VS2010如何调试动态库

项目A是dll动态库项目。项目B是调用dll动态库的exe项目。怎么调试dll动态库里的程序呢? B生成解决方案之后,选择只运行,不调试(不能调试,因为要在dll项目中调试)。 然后在A项目的调试...
  • u012702039
  • u012702039
  • 2014年12月23日 13:48
  • 2109

VS2010动态库调试方法

打开调用动态库的程序,之后在“解决方案资源管理器”中,选中“解决方案’XXX’”,之后在右键菜单中选择“添加->现有项目”,之后在“添加现有项目”对话框中选择动态库程序的vcxproj文件,如图1所示...
  • hou09tian
  • hou09tian
  • 2017年05月27日 06:12
  • 1252

linux下动态链接库使用与单步调试

//动态库调试时,可以在库函数中设置断点,使用n代表不进入库函数单步调试,使用s代//表进入库函数单步调试   //注意:可以使用ldd libtest.so查看动态库的依赖情况 //在默认情况下,运...
  • qq_34680315
  • qq_34680315
  • 2016年04月16日 11:34
  • 454

VS之动态库调试

程序开发中,经常会使用到动态库,动态库不能直接运行,需要依赖其他程序调用,那么我们该如何调试我们的动态库呢?本文通过一个简单的例子说明。...
  • bingdianlanxin
  • bingdianlanxin
  • 2015年01月02日 15:48
  • 2711

memwatch使用笔记

memwatch是一个用于c和c++的内存泄漏检测工具,因为我还不知道的原因,在c++里不是很好用,但是在c是绝对可用的。memwatch从网上下下来的压缩包中,主要就是两个源文件:memwatch....
  • zzhangjiej
  • zzhangjiej
  • 2009年05月21日 15:13
  • 1208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MEMWATCH 调试动态库1
举报原因:
原因补充:

(最多只允许输入30个字)