单元测试工具 BoundsChecker 【转载】

BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。BoundsChecker能检测的错误包括:
_a:Tv9FI0 1))1、指针操作和内存、资源泄露错误,比如:
3`,e(G/[2H"H1n0 内存泄露;
/R(mA6UoYav0 资源泄露; 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)�S1_"WZ+z_"B_Cs'v
对指针变量的错误操作。
Z;X/.D.w"U0 22、内存操作方面的错误,比如: 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)_F9sH1a|$E
  内存读、写溢出; 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS) ["f'^r O fl.N;S
  使用未初始化的内存。 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)UYl�V5M.O._!C Z6v
33、API函数使用错误
h!`J2?x@3}0 BoundsChecker安装成功后,在你的VC++集成开发环境中,会多出了一个名为BoundsChecker的菜单,如下所示: 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)H rBrdm2P


%? ?bLZ9G&O1X0

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)0_t;HLh5x3I*y#?�N

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

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)9d6fD&u;N*zp5j/
BoundsChecker 已经非常完好的集成到VC++集成开发环境中了。
^9MV@n{0 使用BoundsChecker对程序的运行时错误进行检测,有两种使用模式可供选择。一种模式叫做ActiveCheck,一种模式叫做FinalCheck。下面分别进行介绍。
R#{%G#`}H;f�e0
9]$} | t%l.l Q�vW@7o0 3.1 ActiveCheck ActiveCheck是BoundsChecker提供的一种方便、快捷的错误检测模式,它能检测的错误种类有限,只包括:内存泄露错误、资源泄露错误、API函数使用错误。
5W)M4^4V/J{n0 要想使用ActiveCheck模式来检测程序的运行时错误,只需在VC++集成开发环境中打开BoundsChecker功能,然后从调试状态运行程序即可。此时ActiveCheck会在后台自动运行,随时检测程序是否发生了错误。下面说一下具体的使用步骤。 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)6y0v.s |Q9lL3a
3.1.1 用ActiveCheck来检测错误 使用ActiveCheck的具体的操作步骤如下:
JZLagv8z0w S0 首先,在VC++集成开发环境中打开你要对其进行测试的程序,同时保证项目处于Debug编译状态下。
J4`h-^#?0 其 次,确保VC++集成开发环境中[BoundsChecker/Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于被选中的状态。只有这两项被选中,BoundsChecker才会在程序运行过程中发挥作用。
'Q+{`*S}a[0 最后,在VC++集成开发环境中选择[Build/ Start Debug/Go]菜单命令,在Debug状态下运行程序,ActiveCheck也在后台开始运行了。 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)"qQ'bJ�b:a*i mL
这时,就可以按照制定好的测试用例,对程序进行操作。凡是程序执行过的代码,如果存在错误,ActiveCheck就会记录下来。
Om@&z&z_$m`8}0 有一个地方要说一下,在[BoundsChecker]菜单中有一项[Report Errors Immediately],如下图所示: 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS).^0Q _j |-jN1O4w
3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)C"c|@jh

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

B6j_/o [@0

该菜单项对于ActiveCheck 模式,以及下面就要介绍的FinalCheck模式的作用是一样的,即:如果不选中该项,则BoundsChecker会记录程序运行过程中发现的各种错 误,直到程序结束后再进行报告;当选中该菜单项时,在程序的运行过程中,一旦BoundsChecker发现错误,会马上弹出如下的对话框进行提示:3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)E-Ka*f [_

6f!g`6{"Ta0^0

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)eb"YS S#f

7Z7LI5z9iO gAgS0 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)Q|'B6aq9t0j)r{

图3-3 错误报告对话框

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)&]G$H6gi7C B ?+h

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

;N#J#Bp3HyDj n0

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

M@[ |:lk0

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

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS) dquEl2N[)J

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

$v3W_#CkR x3V0

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

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS) Z�o~uB6V

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

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS);^2@]k�i1}*r

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

[s.K$E'Gzw T0

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

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS) PK5[0i/a)|Y }

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

C7FW*hkWYrrkS0

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

4X1l|l Fvl5H"z0 3.1.2 分析错误
S7@%E:x5k#l/k0

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

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)F} Ny8e0F1]

)laz|3km c0

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

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)3{(lQl"o
3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)*H,feTz*F Qgs.b

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

j*?0OSMN/_Z&e E0 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)VP.vIKr ^(n

4s7@Y|{7GXP~4z@0

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)%p!b.d�m1K h

3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)T;juA$Bk4B,qe
3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)3c;R {"L2_/y!O2G
3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)aWQ.FR4pcm

图3-4 错误检测结果

4G.B6R m7@"Ml J1a7S0 在 左边的窗口中,逐条列出了程序在内存、资源、API 函数使用上的问题,包括:该问题的种类,该问题发生的次数,如果是内存泄露,损失了多少内存,以及发生该问题的代码位置等等。当你用鼠标单击选中某一条记 录时,在右边的窗口中会显示出与该条错误记录相对应的函数调用堆栈情况。当你用鼠标双击某一条错误记录时,会定位到引发该错误的源代码处。
H1Q:G)xZ(u0     3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)!a F(d$c8JQe
好了,BoundsChecker在ActiveCheck模式下的使用方法至此介绍完了,是不是很简单?
Z*ufCN!QbY0 在ActiveCheck 模式下检测程序时,程序的运行速度基本不受影响,但其缺点是检测的错误种类有限,即只能检查出内存泄露错误、资源泄露错误、API函数使用错误。 BoundsChecker 提供了另外一种检测错误的模式—— FinalCheck,也就是我们在前面提到的BoundsChecker的第二种使用模式。 FinalCheck可以检测出程序中更多的错误。下面我们就对它进行介绍。
:c;RX]+ys4u|]/ g0 3.2 用 FinalCheck检测更多的错误 FinalCheck 具有BoundsChecker提供的所有检错功能。FinalCheck 是ActiveCheck的超集,它除了能够检测出ActiveCheck能够检测出的错误,还能发现很多 ActiveCheck 不能检测到的错误,包括:指针操作错误、内存操作溢出、使用未初始化的内存等等,并且,对于ActiveCheck能检测出的错误,FinalCheck 能够给出关于错误更详细的信息。所以,我们可以把FinalCheck认为是ActiveCheck的功能增强版。我们付出的代价是:程序的运行速度会变 慢,有时甚至会变的很慢。 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)1?5xNkK_(f
要 想在FinalCheck 模式下测试程序,不能使用VC++集成开发环境提供的编译连接器来构造程序,而必须要使用BoundsChecker提供的编译连接器来编译连接程序。当 BoundsChecker的编译连接器编译连接程序时,会向程序中插装一些错误检测代码,这也就是FinalCheck能够比ActiveCheck找 到更多错误的原因。
*DK.Z8m}%hi0 下面就
}X�|�m,~0h C2QLi0 介绍一下如何在FinalCheck模式下对程序进行测试:
|z0r&Q z4kg:` h0 1在VC++集成开发环境中打开你所要测试的项目。
n;XA7@a-wE0 2由于要使用BoundsChecker的编译连接器重新编译连接程序,所以我们为BoundsChecker独自构造一个文件夹。在VC++集成开发环境中,具体操作方法是: 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)#@�w:q+vCD0zU{7{#SM
A)点击[ Build/Configurations...]菜单命令。 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)h1lci%Q"`�h~
B)在弹出的对话框中点击 Add 按钮。在Configuration 编辑框中添入你为BoundsChecker创建的文件夹的名称,这个名称是任意的,比如我们取名为BoundChecker。
VmT)?p(G0 C)在 Copy settings from组合框中选中 XXX—Win32 Debug项,然后点击OK按钮,接着点击Close按钮。 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)#D9k:dk` o
现在,我们已经为FinalCheck构造好了一个文件夹。
f*ZNa p"k$i'@0 3 点击[Build/Set Active Configuration…] 菜单命令,选中你刚才为BoundsChecker建的文件夹,然后点击OK按钮。这样BoundsChecker编译连接程序时生成的中间文件、可执行程序,都会被放到该文件夹下。 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)2JhRTnwr-@
4 选择[BoundsChecker/Rebuild All with BoundsChecker] 菜单命令,对程序重新进行编译连接,也就是在这时,BoundsChecker向被测程序的代码中加入了错误检测码。编译连接完成后, BoundsChecker会在你为BoundsChecker构造的文件夹中生成可执行文件。
7D a7j$]2h[a0 在FinalCheck模式下对程序进行检测的准备工作都已经做好,这时可以启动程序开始测试了,
!G1[/r%Sa4Xue0 操作步骤与在ActiveChecker模式下没什么区别。具体步骤如下: 3sNews.Net——3S社区&资讯平台(GIS|RS|GPS)R'f5^,oT3NByc

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

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

单元测试工具 BoundsChecker 【转载】相关推荐

  1. 在.NET开发中的单元测试工具之(1)——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  2. 单元测试工具 Numega

    1 前言 我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法. NuMega是一个动态测试工具,主要应用于白盒测试.该工具的特点是学习简单.使用方便.功能 ...

  3. 使用单元测试工具TestDriven.NET调试程序

    文本Tag: TestDirector 单元测试 测试工具 .NET [IT168 技术文档] 引言 在实际的项目中,我们会遇到如下的问题: 1. 在编写一些不太好调试的程序时,如WebService ...

  4. 当前主流的单元测试工具

    Parasoft Jtest 是第一个自动化Java单元测试工具. Jtest自动测试任何Java类或部件,而不需要您写一个测试用例.驱动程序或桩函数.只要点击一个按钮,Jtest自动测试代码构造(白 ...

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

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

  6. 31.Python的单元测试工具——doctest

    转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/51866748 后续此博客不再更新,欢迎大家搜索关注微信公众号"测开之美 ...

  7. Extjs单元测试工具Siesta控件介绍

    Siesta概述 Siesta控件是一个JavaScript单元测试工具,可以助您测试任何Javascript代码和同样测试DOM和模拟用户交互.工具可以和任何javascript代码-jQuery, ...

  8. python逻辑与界面分离_一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

  9. Openstack_单元测试工具 tox

    目录 目录 扩展阅读 Openstack 的单元测试工具 单元测试工具使用流程 tox toxini 参考文章 扩展阅读 Python Mock的入门 Openstack 的单元测试工具 unitte ...

最新文章

  1. matlab多个绘图,合并多个绘图 - MATLAB Simulink - MathWorks 中国
  2. springcloud-06-feign的使用
  3. python如何处理表格_Python是如何处理Excel表格的?方法简单!
  4. Catalan数的理解
  5. Spring Mvc Controller返回值、参数绑定、参数校验 (高级二)
  6. tornado框架hello world实践
  7. Maker工作室_激光雕刻机使用方法
  8. matlab 求积分上限,matlab求解积分上限
  9. java随机数种子_使用种子的Java随机数
  10. 马蜂窝火车票系统服务化改造初探
  11. 软件测试面试题之自动化测试题大合集(下)
  12. java poi 数据透视_java 通过 poi pivotTable 实现 数据透视表
  13. html中如何使用input表单隐藏域?
  14. 计算机在学前教育中作用论文,学前教育论文
  15. Oracle批量低耗清除历史数据
  16. 骨传导耳机到底怎么样,五款好用的骨传导耳机推荐
  17. mysql: “Warning: Using a password on the command line interface can be insecure.“ 解决方法
  18. 企业信息化:如何考虑企业信息化
  19. 手把手教你在Linux(Deepin)把自己下载的软件放到任务栏启动器
  20. 列表与表格(自己的学习分享)

热门文章

  1. 配置springboot使用c3p0连接池
  2. BP(BackPropagation)误差逆传播算法
  3. HashMap红黑树原理及源码分析---图形、注释一应俱全
  4. 使用ADAM将Oracle数据库迁移至阿里云数据库PolarDB
  5. CSVreader和POI操作用法比较,以及CSVReader的坑
  6. oracle orcl不存在,oracle服务丢失的处理方法之OracleServiceORCL不存在示例
  7. win10 解决多用户同时远程连接教程(超详细图文)
  8. PHP相关系列 - 浅析http协议、cookies和session机制、浏览器缓存 .
  9. 你易忽略的三极管电路问题1:下拉电阻
  10. QT——QFile、QDir、QFileInfo