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

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

内存泄露;

资源泄露;

对指针变量的错误操作。

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

内存读、写溢出;

使用未初始化的内存。

33、API函数使用错误

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

图3-1 BoundsChecker在VC++集成开发环境中添加的菜单

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

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

3.1 ActiveCheck

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

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

3.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],如下图所示:

图3-2 关于[BoundsChecker / Report Errors Immediately] 菜单项

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

图3-3 错误报告对话框

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

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

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

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

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

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

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

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

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

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

3.1.2 分析错误

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

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

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

图3-4 错误检测结果

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

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

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

3.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模式下没什么区别。具体步骤如下:

  1. 确保VC++集成开发环境中[BoundsChecker/ Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于选中状态。
  2. 点击[ Build/Start Debug]菜单,选中“Go” 菜单项。程序开始在Debug状态下运行。
  3. 按照你制定好的测试用例,对程序进行操作。
  4. 当BoundsChecker检测到了错误时,会弹出窗口向你汇报,你可以当时就进行处理,也可以等到你的操作全部完成,退出程序之后再对列出的这些错误进行分析。这完全取决于你是否选中了[BoundsChecker/Report Errors Immediately] 菜单项。
  5. 退出程序后,BoundsChecker会给出错误检测结果列表。该错误列表与ActiveChecker给出的错误列表的查看方法完全一样。只不过这个列表中所报告的信息会更多、更详细一些。

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

BoundsChecker的用法相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  3. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  4. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  5. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  6. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  7. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  8. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

  9. TensorFlow用法

    TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...

最新文章

  1. 微软发布Azure Service Fabric Mesh公开预览版
  2. 前端学习(2762):如何使用scss
  3. net自带二进制序列化,XML序列化和ProtoBuf序列化的压缩对比
  4. 计算机二维动画的核心技术是什么意思,数字化技术在二维动画设计中的应用研究...
  5. 利用Python解决豆瓣验证码,实现模拟登陆!
  6. java keytool详解
  7. 130.PHP的语言结构和函数的区别
  8. Html+Css打造一个精美的注册页面
  9. 两张图让你快速读懂JVM字节码指令
  10. switch如何更新大气层,和进入hekate界面
  11. win系统服务器做加速,Win 2003操作系统25招加速大法(转)
  12. 使用积分图像进行自适应二值化[Derek Bradley, Gerhard Roth, 2007]
  13. 微信小程序开发——动画效果
  14. 风格迁移 I2I 论文阅读笔记——U-GAT-IT,动漫风格生成
  15. 966. 元音拼写检查器
  16. strtodate mysql_MySQL str_to_date()函数
  17. 将用好路缘石成型机做好公路项目的经验分享开来
  18. 网商基本法:网上贸易,用网商币
  19. android官网m魅族15,魅族15亮相安卓官网 圆形Home键设计
  20. php存在的两个问题,是导致不再受欢迎的主要原因

热门文章

  1. 有什么好用的便宜的云服务器?
  2. 基于FMC 接口的Xilinx FPGA XC7K325T PCIeX8 接口卡
  3. memtester4.3.0
  4. 留学地 各国比较2021
  5. 【调试】sysRq按键使用方法
  6. 【异步电路碎碎念1】 —— 到底什么是异步电路
  7. 机器学习中训练集、验证集和测试集的作用
  8. Linux权限详解(chmod 777)
  9. linux命令之pip命令
  10. autoware下ndt_mapping节点解读