BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。BoundsChecker能检测的错误包括:

1、指针操作和内存、资源泄露错误,比如:

内存泄露;

资源泄露;

对指针变量的错误操作。

2、内存操作方面的错误,比如:

内存读、写溢出;

使用未初始化的内存。

3、API函数使用错误

BoundsChecker安装成功后,在你的VC++集成开发环境中,会多出了一个名为BoundsChecker的菜单,如下所示:

BoundsChecker 已经非常完好的集成到VC++集成开发环境中了。

使用BoundsChecker对程序的运行时错误进行检测,有两种使用模式可供选择。一种模式叫做ActiveCheck,一种模式叫做FinalCheck。下面分别进行介绍。

1.1 ActiveCheck

ActiveCheck是BoundsChecker提供的一种方便、快捷的错误检测模式,它能检测的错误种类有限,只包括:内存泄露错误、资源泄露错误、API函数使用错误。

要想使用ActiveCheck模式来检测程序的运行时错误,只需在VC++集成开发环境中打开BoundsChecker功能,然后从调试状态运行程序即可。此时ActiveCheck会在后台自动运行,随时检测程序是否发生了错误。下面说一下具体的使用步骤。

1.1.1 用ActiveCheck来检测错误

使用ActiveCheck的具体的操作步骤如下:

首先,在VC++集成开发环境中打开你要对其进行测试的程序,同时保证项目处于Debug编译状态下。

其次,确保VC++集成开发环境中[BoundsChecker/Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于被选中的状态。只有这两项被选中,BoundsChecker才会在程序运行过程中发挥作用。

最后,在VC++集成开发环境中选择[Build/ Start Debug/Go]菜单命令,在Debug状态下运行程序,ActiveCheck也在后台开始运行了。

这时,就可以按照制定好的测试用例,对程序进行操作。凡是程序执行过的代码,如果存在错误,ActiveCheck就会记录下来。

有一个地方要说一下,在[BoundsChecker]菜单中有一项[Report Errors Immediately],如下图所示:

该菜单项对于ActiveCheck 模式,以及下面就要介绍的FinalCheck模式的作用是一样的,即:如果不选中该项,则BoundsChecker会记录程序运行过程中发现的各种错误,直到程序结束后再进行报告;当选中该菜单项时,在程序的运行过程中,一旦BoundsChecker发现错误,会马上弹出如下的对话框进行提示:

下面按图中标注的数字序号解释一下对话框中各个按钮的功能:

按钮1:点击该按钮,则表示先暂时不理会这个错误,继续执行程序。

按钮2:点击该按钮,则会马上跳转到出现问题的代码行处。处理完问题后,点击[Build/ Start Debug/Go]菜单项,可以继续执行程序,进行检测。

按钮3:点击该按钮,则将该错误添加到被忽略的错误列表中去,当再次出现这个问题时,BoundsChecker将不会进行报告。

按钮4:点击该按钮,则立即终止程序的执行。

按钮5:点击该按钮,会显示当前内存的申请、使用情况。

按钮6:点击该按钮,会得到当前这个错误的帮助信息。

按钮7、8: 这两个按钮与[BoundsCheckerReport Errors Immediately]和[BoundsChecker Report Errors and Event] 菜单命令的功能是完全一样的,在此不再赘述。

按钮9:点击该按钮,会显示/隐藏与该错误有关的函数调用堆栈情况,以及具体的出错代码行的位置。

是否选中[BoundsChecker/Report Errors Immediately]菜单项,完全取决于你自己的喜好,以及测试时的具体情况。如果你想要BoundsChecker在程序运行过程中实时向你汇报发现的错误,那么你就选中这个菜单项;如果想等到操作结束后,再对操作过程中BoundsChecker发现的错误统一进行分析,就不必选中这个菜单项。我在平常使用过程中更偏向于使用后一种。

1.1.2 分析错误

在你操作全部结束,退出程序后,

BoundsChecker 会显示一个所发现错误的列表。我们需要对列表中罗列的错误进行分析,来确定错误的原因和位置。

在错误检测结果列表中,罗列出了在程序的执行过程中ActiveCheck检测到的所有的内存泄露、资源泄露和API函数使用错误的相关信息。如下图所示:

在左边的窗口中,逐条列出了程序在内存、资源、API 函数使用上的问题,包括:该问题的种类,该问题发生的次数,如果是内存泄露,损失了多少内存,以及发生该问题的代码位置等等。当你用鼠标单击选中某一条记录时,在右边的窗口中会显示出与该条错误记录相对应的函数调用堆栈情况。当你用鼠标双击某一条错误记录时,会定位到引发该错误的源代码处。

好了,BoundsChecker在ActiveCheck模式下的使用方法至此介绍完了,是不是很简单?

在ActiveCheck模式下检测程序时,程序的运行速度基本不受影响,但其缺点是检测的错误种类有限,即只能检查出内存泄露错误、资源泄露错误、API函数使用错误。BoundsChecker 提供了另外一种检测错误的模式—— FinalCheck,也就是我们在前面提到的BoundsChecker的第二种使用模式。 FinalCheck可以检测出程序中更多的错误。下面我们就对它进行介绍。

1.2 用 FinalCheck检测更多的错误

FinalCheck具有BoundsChecker提供的所有检错功能。FinalCheck 是ActiveCheck的超集,它除了能够检测出ActiveCheck能够检测出的错误,还能发现很多 ActiveCheck 不能检测到的错误,包括:指针操作错误、内存操作溢出、使用未初始化的内存等等,并且,对于ActiveCheck能检测出的错误,FinalCheck能够给出关于错误更详细的信息。所以,我们可以把FinalCheck认为是ActiveCheck的功能增强版。我们付出的代价是:程序的运行速度会变慢,有时甚至会变的很慢。

要想在FinalCheck 模式下测试程序,不能使用VC++集成开发环境提供的编译连接器来构造程序,而必须要使用BoundsChecker提供的编译连接器来编译连接程序。当 BoundsChecker的编译连接器编译连接程序时,会向程序中插装一些错误检测代码,这也就是FinalCheck能够比ActiveCheck找到更多错误的原因。

下面就

介绍一下如何在FinalCheck模式下对程序进行测试:

1在VC++集成开发环境中打开你所要测试的项目。

2由于要使用BoundsChecker的编译连接器重新编译连接程序,所以我们为BoundsChecker独自构造一个文件夹。在VC++集成开发环境中,具体操作方法是:

A)点击[ Build/Configurations...]菜单命令。

B)在弹出的对话框中点击 Add 按钮。在Configuration 编辑框中添入你为BoundsChecker创建的文件夹的名称,这个名称是任意的,比如我们取名为BoundChecker。

C)在 Copy settings from组合框中选中 XXX—Win32 Debug项,然后点击OK按钮,接着点击Close按钮。

现在,我们已经为FinalCheck构造好了一个文件夹。

3 点击[Build/Set Active Configuration…] 菜单命令,选中你刚才为BoundsChecker建的文件夹, 然后点击OK按钮。这样BoundsChecker编译连接程序时生成的中间文件、可执行程序,都会被放到该文件夹下。

4选择[BoundsChecker/Rebuild All with BoundsChecker] 菜单命令,对程序重新进行编译连接,也就是在这时,BoundsChecker向被测程序的代码中加入了错误检测码。编译连接完成后,BoundsChecker会在你为BoundsChecker构造的文件夹中生成可执行文件。

在FinalCheck模式下对程序进行检测的准备工作都已经做好,这时可以启动程序开始测试了,

操作步骤与在ActiveChecker模式下没什么区别。具体步骤如下:

确保VC++集成开发环境中[BoundsChecker/ Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于选中状态。

点击[ BuildStart Debug]菜单,选中“Go” 菜单项。程序开始在Debug状态下运行。

按照你制定好的测试用例,对程序进行操作。

当BoundsChecker检测到了错误时,会弹出窗口向你汇报,你可以当时就进行处理,也可以等到你的操作全部完成,退出程序之后再对列出的这些错误进行分析。这完全取决于你是否选中了[BoundsChecker/Report Errors Immediately] 菜单项。

退出程序后,BoundsChecker会给出错误检测结果列表。该错误列表与ActiveChecker给出的错误列表的查看方法完全一样。只不过这个列表中所报告的信息会更多、更详细一些。

好了,BoundsChecker在FinalCheck模式下的使用也介绍完了。ActiveChecker、FinalCheck这两种模式,比较而言各有长短。ActiveChecker使用方便,只需在Debug状态下直接运行程序即可,并且程序的运行速度较快,但检测的错误种类有限;FinalCheck模式下,需要使用BoundsChecker的编译连接器重新编译连接生成可执行程序,并且程序的运行速度比较慢,但检测的错误种类、提供的错误相关信息要多于ActiveChecker。所以,何时使用何种模式,应根据当时的具体情况而定。

1.3 检测Win32 API函数的兼容性

BoundsChecker还提供了一个功能——检测程序中使用的Win32 API函数在不同平台上的兼容性。该功能与前面提到的ActiveChecker、FinalCheck模式没有什么关系,它是独立的一个功能。

虽然大多数Win32 API函数都适用于Win95、Win98、Win2000、WinNT等不同的Windows操作系统平台,但并不是所有的API函数都满足这种情况。你可能不知不觉的使用了在某一个平台下允许,在另一个平台下却不允许使用的API函数,而项目的要求是:程序能够在这两种平台下运行。 BoundsChecker提供的这个检测Win32 API函数兼容性的功能,恰好能够处理这个问题。

该功能的使用方法如下:

启动[BoundsChecker/View/Compliance Report]菜单命令,如下图所示:

在对话框中选择程序承诺能够运行的平台,以及被要求遵从的其他标准(标准C和扩展的标准C),点击“OK”按钮,BoundChecker会给出兼容性检测报告。

1.4 忽略错误

在某些情况下,我们需要忽略BoundsChecker报告的一些错误,这些情况包括:

1 误报。BoundsChecker 指定程序中的某段代码存在错误,但经过我们的仔细检查,证实程序确实没有这个错误,这是BoundsChecker的误报。工具毕竟是工具,它只能依照为它制定的算法行事,所以会有误报的情形发生。但千万不要轻易认定某一个错误为误报,一定要对错误进行仔细的分析,确定是真正的误报。

2第三方的代码。BoundsChecker指定的错误发生位置在第三方提供的代码中,包括第三方提供的程序库、DLL、OCX等。对于这种情况,我们也要先进行认真的检查,确定不是由于我们错误的使用第三方的代码引起的。如果最后确定不是我们的原因,则这样的错误报告可以忽略。

1.5 其他

还有一点需要强调,使用BoundsChecker对程序进行测试时,需要有程序的源代码。如果没有源码,BoundsChecker虽然也可以打开EXE文件将其执行起来,但得出的测试结果经常是不正确的,因此也就没有太大的意义。

另外,除了可以在VC++集成开发环境中使用BoundChecker外,从 [开始菜单] 中启动BoundChecker,然后打开经BoundChecker编译连接生成的可执行文件,也可以对程序进行测试,操作方法与集成到VC++集成开发环境中的BoundChecker的操作方法是一样的,在此就不赘述了。

至此,BoundChecker所提供的功能全部介绍完了。

BoundsChecker的使用相关推荐

  1. Visual studio内存泄露检查工具--BoundsChecker

    BoundsChecker是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误. BoundsChecker能检测的错误包括: 1)指针操作和内存.资源泄露错误,比如:内存泄露: ...

  2. 使用BoundsChecker查找内存泄露

    以前搞开发时,曾经写过类似的文章,不过带不出来,最近VS推出了新版VS2010,而BoundsChecker也推出了适用于vc6, vs2005,vs2008,vs2010的新版本,于是下载下来试了一 ...

  3. 学习BoundsChecker

    对C++程序不熟悉,但是因为工作需要,要对一些程序进行测试分析,找出是否有内存泄露情况.在网上找到了大家比较推崇的BoundsChecker,安装后开始看软件自带的手册,为了让更多的同事一起学习,要将 ...

  4. 我是怎样使用BoundsChecker的

    在开始本文之前,我想声明的是我曾经在NuMega工作过,并在那里参与编写了BoundsChecker的3.4.5版本.显然,我个人非常推崇BoundsChecker,尽管还会有一些其它能与Bounds ...

  5. BoundsChecker的用法

    BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误.BoundsChecker能检测的错误包括: 1))1.指针操作和内存.资源泄露错误,比如: 内 ...

  6. BoundsChecker简易使用教程

    BoundsChecker是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误. BoundsChecker能检测的错误包括: 1)指针操作和内存.资源泄露错误,比如:内存泄露: ...

  7. VS2005 下使用BoundsChecker检测内存泄露

    BoundsChecker无法集成到VS2005中,使用时:先用VS2005 debug模式下生成EXE,然后再用BoundsChecker打开这个EXE文件即可. 在使用过程中发现: 对于同一内存泄 ...

  8. 内存检测工具BoundsChecker使用详述

    内存检测工具BoundsChecker使用详述 或许你还不知道大名顶顶的Nu-Mega,但一定听说过他们的产品SoftICE,BoundsChecker也是这家公司的产品.与Visual C++配合使 ...

  9. BoundsChecker检查内存泄露

    网上有几篇文章是写BoundsChecker的,主要是讲用途在哪,对于我这初学的,连基本使用步骤还不会,运用到实际项目中就更加困难,而且DevPartner这个软件网上有几个版本,有些个下载安装好,根 ...

  10. 单元测试工具 BoundsChecker 【转载】

    单元测试工具 BoundsChecker [转载] BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误.BoundsChecker能检测的错误包括: ...

最新文章

  1. C#中运行命令行截取输出流的例子
  2. 聋哑六年级计算机课教学进度计划,小学六年级下册信息技术教学计划三篇
  3. Linux命令ps解读
  4. 想建一个带分隔条的label 控件;
  5. js中toString()和String()区别详解
  6. OPCDA通信--工作在透明模式下的CISCO ASA 5506-X防火墙配置
  7. strcpy完整版 与 strcpy为什么有返回值
  8. 嘉年华回顾丨 周正中(德哥)谈谈PG怎么这么火
  9. Jedis与Lua脚本结合
  10. 高并发来袭,如何搭建微服务架构?
  11. CTF之做题总结(二)
  12. 直方图均衡化 java,OpenCV Java 直方图均衡化
  13. CMMI五个成熟度级别和对应22个过程域(PA)
  14. 戴尔游匣5577黑苹果EFI文件
  15. 中国信息导航网贤士招募令
  16. 3D打印中常见的7中材质分析
  17. HBase中MemStore flush的源码解析
  18. LibreOJ10155 数字变换 ------ 树形dp
  19. Linux概述及软件安装与使用
  20. 农用地转为建设用地审批(农转用审批)

热门文章

  1. R语言混合效应(多水平/层次/嵌套)模型及贝叶斯实现
  2. 在线播放m3u8和ts的方法
  3. Win7 旗舰版改为专业版(不用重装)
  4. excel文件被写保护怎么解除_u盘被写保护怎么解除_u盘怎么解除写保护状态
  5. 统信系统安装京瓷打印机驱动步骤 针对京瓷系列复合机的UOS操作系统用户使用说明
  6. java 圣思园视频资源
  7. SketchUp + Ruby 二次开发初识
  8. 虚拟机Windows xp联网
  9. [软考] 知道IP地址如何计算网络地址、广播地址、地址范围、本网主机数
  10. ArcGISServer 10.2发布地理处理服务:以CAD数据至地理数据库为例(2)发布地理处理服务