第4代白盒测试方法实践之“内存泄露检查工具VLD如何与VcTester配合使用”

发表于:2011-8-08 11:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  灵活自由是C语言的一大特色,但这个特色也难以避免的带来一些副作用,比如内存泄露。众所周知,内存泄露的问题比较复杂,程序正常运行时你看不出它有任何异常,但长时间运行或在特定条件下特定操作重复多次时,它才暴露出来。所以,内存泄露往往是难以发现,也难以定位解决的。

  VisualLeakDetector(VLD)是一款用于VisualC++的免费的内存泄露检测工具,用户可从http://www.codeproject.com/tools/visualleakdetector.asp下载,该软件以库形式与用户的被测工程一起使用,由于VLD是按LGPL(GNULESSERGENERALPUBLICLICENSE)协议对外开源,所以使用VLD是安全的,不必担心版权问题。

  VcTester是一款适合于VC代码的白盒测试工具,借助它的脚本驱动与脚本桩功能,可以方便的发起各项测试,因为内存泄露通常在特定操作下才发生,将VcTester与VLD配合使用,由VcTester模拟各种应用场景,VLD检测这些使用场合下有无内存泄露。

  使用VLD

  先从网站下载VLD的zip包,当前最高版本是V1.0,解压后得到vld.h、vldapi.h、vld.lib、vldmt.lib、vldmtdll.lib、dbghelp.dll等文件,把这些所有.h头文件拷贝到VC默认的include目录下,将所有.lib文件拷贝到VC默认的lib目录下,安装工作就完成了。

  使用VLD很简单,只须在包含入口函数的CPP或C文件中把vld。h头文件包含进来即可。该include语句要求放在最前面,如果当前工程定义预编译head文件(如stdafx.h),则放在“#include<stdafx.h>”语句之后就可以了。之后正常编译、按Debug方式运行被测程序,等程序运行结束时,查阅VC的output窗口,会有“VisualLeakDetectorisnowexiting.”一句打印信息,在这条件信息之前,如果当前程序没有内存泄露会有“Nomemoryleaksdetected.”信息打印,但如果有内存泄露,将有类似如下信息打印:

  C:/VcTester21/sample/vc6/SampleMain.c(80):main

  crt0.c(206):mainCRTStartup

  0x7C816FD7(Fileandlinenumbernotavailable):RegisterWaitForInputIdle

  Data:

  CDCDCDCDCD................

  VisualLeakDetectordetected1memoryleak.

  这个信息指明当前发生内存泄露所在的函数及源文件行号,泄露内存块的地址、长度及当前内存值。用鼠标双击指示源码行的提示信息,VC即自动跳转到相应代码行,我们就很方便的知道是哪一行出错了。

  可以看出,VLD用起来很简单,对它的实现原理感兴趣的朋友可以阅读VLD源码,也可参考dofty的文章:使用VisualLeakDetector检测内存泄露。

  版本兼容问题

  VcTester支持在VC中启动被测程序后再展开各项测试,这两个工具同时使用并不冲突。但这两者都使用微软的DbgHelp实现测试,由于两者使用DbgHelp版本不同,这两个工具的适用范围并不重合。

  从官方网站下载的VLD软件包使用DbgHelpV6.3版本,而VcTester使用DbgHelpV6.5,前者适用于VC6与VC7,而后者适用于VC6、VC7与VC8。因为VcTester为预防DbgHelp版本冲突,已将DbgHelp.dll重定向为DbgH__.dll,所以这两者共用不会有冲突,需要注意的仅是:官方VLD版本支持VC8(即VisualStudio2005)可能有问题,需要拿源码在VC8下重编译生成相应的Lib库,这一点VLD版本使用说明中已指出。

相关链接:

第4代白盒测试方法实践之“VcTester插装原理与各种覆盖率配置”

第4代白盒测试方法实践之“使用VcTester构造持续集成及每日构建平台”

第4代白盒测试方法实践之“如何在VcTester集成自动构建功能”

第4代白盒测试方法实践之“如何将Pclint嵌入到VcTester中使用”

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号