BoundsChecker是一个运行时错误检测工具,主要定位运行时发生的各种错误。BoundsChecker使用一种称为代码注入的技术,
要拦截对分配和释放内存的函数的调用,简单来说就是当你的程序开始运行时,BoundsChecker的DLL会自动加载到进程的地址空间中,然后它会修改在进程中分配和释放内存的函数调用。
让这些调用先变成它的代码,然后执行原代码,而且在做这些动作的时候,不需要修改被调试程序的源代码或者工程配置文件,使用起来非常简单直接。
通过驻留在Visual C开发环境中的自动调试处理程序,BoundsChecker还可以加速应用程序的开发并缩短产品发布时间。通过测试应用程序的运行,提供了清晰详细的程序错误分析。
自动找出静态堆栈错误和内存/资源泄漏,并能快速定位错误的源代码,即使没有源代码,也可以检查第三方组件的错误。对于编程错误,大部分是C特有的,提供了清晰详细的分析。
它可以检测和诊断静态、堆栈内存中的错误以及内存和资源泄漏问题。在运行状态下,BoundsChecker验证了8700多个API和OLE方法。
包括最新的Windows APIs、ODBC、ActiveX、DirectX、COM、Internet APIs等。如有需要请下载使用。
BoundsChecker能检测的错误包括:
1.指针操作和内存及资源泄漏错误,如:内存泄漏;资源泄漏;指针变量上的错误操作
2.内存操作错误,如内存读写溢出;使用未初始化的内存
3.API函数使用不当
BoundsChecker使用说明1.BoundsChecker的安装并不复杂。点击压缩包中的“setup.exe”,按照提示一路安装。完成后,有两种方式调用软件:一种是直接启动BC7.exe,
另一个集成在VC中,开始调试VC。你会发现在VC 6.0的调试项和工具栏界面中有一个额外的BoundsChecker选项,如下图所示:
2.使用BoundsChecker检测程序的运行时错误,有两种模式可供选择:一种称为ActiveCheck,另一种称为FinalCheck:
ActiveCheck
ActiveCheck是BoundsChecker提供的一种方便快捷的错误检测模式,只能检测有限数量的错误,包括内存泄漏错误、资源泄漏错误和API函数使用错误。
如果想使用ActiveCheck模式检测程序的运行时错误,只需要在VC集成开发环境中打开BoundsChecker函数,然后从调试状态运行程序即可。此时,ActiveCheck将在后台自动运行。
随时检查程序中是否有错误,如下所示:
在VC集成开发环境中打开要测试的程序,同时确保项目处于调试编译状态。
确保VC集成开发环境中的菜单项[bounds checker/集成调试]和[bounds checker/报告错误和事件]处于选中状态。
在VC集成开发环境中选择[Build/Start Debug/Go]菜单命令,在调试状态下运行程序,ActiveCheck也开始在后台运行。这个时候,你可以按照已经建立的测试用例。
对程序进行操作,凡是程序执行过的代码,如果存在错误,ActiveCheck就会记录下来。
、另外,在[BoundsChecker]菜单中有一项[Report Errors Immediately],如果不选中该项,则BoundsChecker会记录程序运行过程中发现的各种错误,
直到程序结束后再进行报告
、当选中该菜单项时,在程序的运行过程中,一旦BoundsChecker发现错误,会马上弹出如下的对话框进行提示,为了方便说明,小编从左到右依次进行了编号1-9,含义分别如下:
按钮1:点击该按钮,则表示先暂时不理会这个错误,继续执行程序
按钮2:点击该按钮,则会马上跳转到出现问题的代码行处,处理完问题后,点击[Build/Start Debug/Go]菜单项,可以继续执行程序,进行检测
按钮3:点击该按钮,则将该错误添加到被忽略的错误列表中去,当再次出现这个问题时,BoundsChecker将不会进行报告
按钮4:点击该按钮,则立即终止程序的执行
按钮5:点击该按钮,会显示当前内存的申请、使用情况
按钮6:点击该按钮,会得到当前这个错误的帮助信息
按钮7、8:这两个按钮与[BoundsChecker\Report Errors Immediately]和[BoundsChecker\ Report Errors and Event] 菜单命令的功能是完全一样的,
按钮9:点击该按钮,会显示/隐藏与该错误有关的函数调用堆栈情况,以及具体的出错代码行的位置
、在你操作全部结束,退出程序后,BoundsChecker会显示一个所发现错误的列表,我们需要对列表中罗列的错误进行分析,来确定错误的原因和位置。
在错误检测结果列表中,罗列出了在程序的执行过程中ActiveCheck检测到的所有的内存泄露、资源泄露和API函数使用错误的相关信息,如下图:
在左边的窗口中,逐条列出了程序在内存、资源、API 函数使用上的问题,包括:该问题的种类,该问题发生的次数,如果是内存泄露,损失了多少内存,以及发生该问题的代码位置等等。
当你用鼠标单击选中某一条记录时,在右边的窗口中会显示出与该条错误记录相对应的函数调用堆栈情况。当你用鼠标双击某一条错误记录时,会定位到引发该错误的源代码处
FinalCheck
在ActiveCheck模式下检测程序时,程序的运行速度基本不受影响,但其缺点是检测的错误种类有限,即只能检查出内存泄露错误、资源泄露错误、API函数使用错误。
BoundsChecker 提供了另外一种检测错误的模式—— FinalCheck,它除了能够检测出ActiveCheck能够检测出的错误,
还能发现很多ActiveCheck 不能检测到的错误,包括:指针操作错误、内存操作溢出、使用未初始化的内存等等,并且,对于ActiveCheck能检测出的错误,
FinalCheck能够给出关于错误更详细的信息。所以,我们可以把FinalCheck认为是ActiveCheck的功能增强版。我们付出的代价是:程序的运行速度会变慢,有时甚至会变的很慢。
要想在FinalCheck模式下测试程序,不能使用VC++集成开发环境提供的编译连接器来构造程序,而必须要使用BoundsChecker提供的编译连接器来编译连接程序。
当BoundsChecker的编译连接器编译连接程序时,会向程序中插装一些错误检测代码,具体步骤如下:
准备工作:
a、在VC++集成开发环境中打开你所要测试的项目
b、点击[ Build/Configurations.]菜单命令,在弹出的对话框中点击Add 按钮。
在Configuration 编辑框中添入你为BoundsChecker创建的文件夹的名称(这个名称是任意的),在Copy settings from组合框中选中XXX—Win32 Debug项,
然后点击OK按钮,接着点击Close按钮。
c、点击[Build/Set Active Configuration…] 菜单命令,选中你刚才为BoundsChecker建的文件夹,然后点击OK按钮。
这样BoundsChecker编译连接程序时生成的中间文件、可执行程序,
都会被放到该文件夹下d、选择[BoundsChecker/Rebuild All with BoundsChecker] 菜单命令,对程序重新进行编译连接,也就是在这时,
BoundsChecker向被测程序的代码中加入了错误检测码。编译连接完成后, BoundsChecker会在你为BoundsChecker构造的文件夹中生成可执行文件,至此,
在FinalCheck模式下对程序进行检测的准备工作都已经做好,这时可以启动程序开始测试了
确保VC++集成开发环境中[BoundsChecker/Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于选中状态
点击[ Build\Start Debug]菜单,选中“Go” 菜单项。程序开始在Debug状态下运行
按照你制定好的测试用例,对程序进行操作
当BoundsChecker检测到了错误时,会弹出窗口向你汇报,你可以当时就进行处理,也可以等到你的操作全部完成,退出程序之后再对列出的这些错误进行分析。
这完全取决于你是否选中了[BoundsChecker/Report Errors Immediately] 菜单项
退出程序后,BoundsChecker会给出错误检测结果列表,该错误列表与ActiveChecker给出的错误列表的查看方法完全一样,只不过这个列表中所报告的信息会更多、更详细一些
3、检测Win32 API函数的兼容性
BoundsChecker还提供了一个功能——检测程序中使用的Win32 API函数在不同平台上的兼容性。该功能与前面提到的ActiveChecker、FinalCheck模式没有什么关系,
它是独立的一个功能,具体操作方法如下:
启动[BoundsChecker/View/Compliance Report]菜单命令
在对话框中选择程序承诺能够运行的平台,以及被要求遵从的其他标准(标准C和扩展的标准C),点击“OK”按钮,BoundChecker将会给出兼容性检测报告。
4、使用BoundsChecker对程序进行测试时,需要有程序的源代码,如果没有源码,BoundsChecker虽然也可以打开EXE文件将其执行起来,但得出的测试结果经常是不正确的,
因此也就没有太大的意义
BoundsChecker需要忽略的错误:
在某些情况下,我们需要忽略BoundsChecker报告的一些错误,这些情况包括:
1、误报
BoundsChecker指定程序中的某段代码存在错误,但经过我们的仔细检查,证实程序确实没有这个错误,这是BoundsChecker的误报,工具毕竟是工具,它只能依照为它制定的算法行事,
所以会有误报的情形发生,但千万不要轻易认定某一个错误为误报,一定要对错误进行仔细的分析,确定是真正的误报
2、第三方的代码
BoundsChecker指定的错误发生位置在第三方提供的代码中,包括第三方提供的程序库、DLL、OCX等,对于这种情况,我们也要先进行认真的检查,确定不是由于我们错误的使用第三方的代码引起的,
如果最后确定不是我们的原因,则这样的错误报告可以忽略
-
可以插原神人物的游戏手游 2025-10-17
-
仙剑奇侠传4结局官方解释?仙剑四结局深度解析 2025-10-17
-
lpl各战队主场城市 2025-10-17
-
魔兽世界怀旧服锻造分支怎么选择60年代分支选择推荐 2025-10-17
-
仙剑奇侠传4演员名单(仙剑奇侠传4四大主角) 2025-10-17
-
仙剑奇侠传4演员表曝光(仙剑奇侠传4人物详细信息) 2025-10-17