`
blogfeifei
  • 浏览: 1206616 次
文章分类
社区版块
存档分类
最新评论

BoundsChecker用法

 
阅读更多

最近我发现我那个程序泄露严重,手动也查不出来。指针乱指。所以刚下了个BoundChecker 6.0 版的 嘿嘿ie

在网上看到了它的用法,感觉还不错。

BoundsChecker用法

http://blog.sina.com.cn/u/53d9f7e9010007fz

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

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

内存泄露;

资源泄露;

对指针变量的错误操作。

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

内存读、写溢出;

使用未初始化的内存。

33、API函数使用错误

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

1.jpg

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

2.jpg

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

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

3.jpg

图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函数使用错误的相关信 息。如下图所示:

4.jpg

图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检测内存泄漏

    使用BoundsChecker检测内存泄漏 BoundsChecker 是一种用于检测内存泄漏的工具,它采用 Code Injection 技术来截获对内存分配和释放函数的调用。下面是 BoundsChecker 的工作原理和实现细节: BoundsChecker 工作...

    MFC内存泄漏检测工具BoundsChecker用法.txt

    简单介绍了MFC下内存泄漏检测工具BoundsChecker的用法。

    BoundsChecker使用说明

    因为工作需要了解BoundsChecker测试工具,所以从网上找了些资料,研究了一个说明文档,进行了整理,并给出一些简单的示例,与大家分享。

    Numega.BoundsChecker.v6.5.rar

    对于初次使用者,这是一个了解软件背景和正确使用方法的重要资源。 Readme.txt是标准的说明文件,其中包含了软件的安装步骤、系统需求、更新信息和可能遇到的问题解决方案。对于任何软件来说,这是了解其基本操作和...

    BoundsChecker使用说明.pdf

    本文将详细介绍BoundsChecker的使用方法、工作原理及其在cs(计算机科学)领域的应用。 一、BOUNDSCHECKER简介 BoundsChecker是一款由Compuware公司开发的调试工具,它能帮助程序员在程序运行时检测到多种类型的...

    BoundsChecker6.5_VC++内存泄漏查看软件

    在使用BoundsChecker6.5时,开发者需要注意以下几点: 1. **集成环境设置**:BoundsChecker需要与VC++6.0或更高版本集成,通过设置编译器选项和调试环境,使工具能在运行时介入。 2. **调试模式**:在调试模式下运行...

    Compuware.DriverStudio.v3.2 第二卷 共两卷

    由于与BoundsChecker Driver Edition集成在一起, 在DriverWorkbench 中可以看到在系统崩溃前或其登录的时候由BoundsChecker 采集到的数据。这种独特的查看系统的方式提供了空前的能力,使得可以通过查看在系统崩溃...

    Compuware.DriverStudio.v3.2 第一卷 共两卷

    由于与BoundsChecker Driver Edition集成在一起, 在DriverWorkbench 中可以看到在系统崩溃前或其登录的时候由BoundsChecker 采集到的数据。这种独特的查看系统的方式提供了空前的能力,使得可以通过查看在系统崩溃...

    大内高手调试手段及原理-50页.pdf

    作者没有详细介绍boundschecker、purify、valgrind或gdb等常见调试工具的使用方法,因为这些工具的使用相对简单。相反,文章深入到应用程序、编译器和调试器三个层次,揭示了这些调试工具背后的原理。 首先,从应用...

    单元测试工具Numega

    火龙果软件工程技术中心 1前言 我在本文中详细介绍了测试工具NuMegaDevpartner(以下简称NuMega)的使用方法。NuMega是一个动态测试工具,主要应用于白盒测试。该工具的特点是学习简单、使用方便、功能有效。NuMega...

    大内高手--调试手段及原理

    这里我不打算讲解如何使用boundschecker、purify、valgrind或者gdb,使用这些工具非常简单,讲解它们只是多此一举。相反,我们要研究一下这些工具的实现原理。 本文将从应用程序、编译器和调试器三个层次来讲解...

    SmartCheck6.2

    《SmartCheck6.2:VB编程者的得力调试伙伴》 SmartCheck6.2是一款针对VB(Visual Basic)开发的终极调试...对于正在使用或学习VB的程序员来说,掌握SmartCheck6.2的使用方法,无疑会大大提高他们的编程技能和效率。

    内存泄漏的检测、定位和解决经验总结

    目前 Windows 平台上流行的内存泄露检测工具有 Rational Purify、BoundsChecker、insure++ 等。由于 CSS 较复杂又是多线程采用 Rational Purify 工具程序就启动不起来,无法进行检测;parasoft 公司的 insure++ 工具...

    堆栈溢出了怎么办?.pdf

    - **使用静态分析工具**:虽然BoundsChecker在此案例中不可行,但还有其他静态分析工具可以帮助检测潜在的溢出问题。 - **优化内存分配**:减少不必要的内存分配,避免过度使用栈空间。 - **使用动态内存分配**:...

    堆栈溢出了怎么办?.docx

    使用 IDE 集成工具,例如 BoundsChecker,可以检测堆栈的边界。但是,这些工具可能对大型项目的运行速度产生影响。 3. 人肉终极杀招 人肉终极杀招是指通过 dump 或者 map 文件找到出错代码行,然后阅读代码,检查...

    C++内存管理.doc

    2.3.3.2 使用BoundsChecker检测内存泄漏 2.3.3.3 使用Performance Monitor检测内存泄漏 3 探讨C++内存回收 3.1 C++内存对象大会战 3.1.1 基本概念 3.1.2 三种内存对象的比较 3.1.3 使用栈对象的意外收获 3.1.4 禁止...

    大内高手 编程高手完全笔记

    其次,从编译器层面,如BoundsChecker和Purify这样的工具使用编译时插桩(CTI)或对象代码插入(OCI)技术。CTI在预处理和编译之间插入代码,对内存相关操作进行监控,而OCI则是在可执行文件级别替换原始指令。这两...

    C语言软件编程经验交流ppt课件.ppt

    在开发工具的选择上,推荐使用经典的VC++6.0或VS20XX作为编辑器,利用msdn作为编程辅助,同时利用vc助手、numega bounds checker、intel vtune以及source insight等功能性软件来优化开发过程。 在C语言基础方面,...

    C++内存回收机制说明文档

    * BoundsChecker:一个商业的内存检测工具,可以检测内存泄漏、野指针、缓冲区溢出等问题。 2.3.4 内存泄漏的解决方法 为了解决内存泄漏问题,我们可以采取以下措施: * 使用Smart Pointer:可以自动释放内存,...

Global site tag (gtag.js) - Google Analytics