BoundsChecker用法「建议收藏」

最近我发现我那个程序泄露严重,手动也查不出来。指针乱指。所以刚下了个BoundChecker6.0版的嘿嘿ie在网上看到了它的用法,感觉还不错。BoundsChecker用法http://blog.sina.com.cn/u/53d9f7e9010007fzBoundsChecker是一个Run-Time错误检测工具,它主要定位程序在运行时期发…

大家好,又见面了,我是你们的朋友全栈君。

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

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

BoundsChecker用法

http://blog.sina.com.cn/u/53d9f7e9010007fz BoundsChecker用法「建议收藏」

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。所以,何时使用何种模式,应根据 当时的具体情况而定。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126812.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • notify是object方法吗_wait方法和notify方法

    notify是object方法吗_wait方法和notify方法区别notify:只会唤醒等待该锁的其中一个线程。notifyAll:唤醒等待该锁的所有线程。既然notify会唤醒一个线程,并获取锁,notifyAll会唤醒所有线程并根据算法选取其中一个线程获取锁,那最终结果不都是只有一个线程获取锁吗?那JDK为什么还需要做出来这两个方法呢?这两种同步方法本质上会有什么区别?这还要从对象内部锁的调度说起。对象内部锁其实,每个对象都拥有两个池,分…

  • android service的作用_android threadlocal

    android service的作用_android threadlocalAndroid-Service和Thread

  • P2P技术应用

    P2P技术应用P2P技术应用P2P,即对等连接(peertopeer)是指两个主机在通信时并不区分哪一个是服务请求放还是服务提供方。两个主机都运行了对等连接软件(P2P软件,例如我们平时用的百度云盘、微博网盘、还有死去的360网盘),它们就可以进行平等的、对等的连接通信。这是双方都可以对等的下载对方已经存储在硬盘上中的共享文档。因此这种工作方式也成为P2P文件共享。一、P2P的工作方式概述

  • 可以搜课程设计的网站_课程设计论文格式

    可以搜课程设计的网站_课程设计论文格式1.主要功能:展示各种类型的作文。普通用户的登录注册和管理员用户登录。可以精确或模糊按照作文题目搜索。还有分页功能,首页、尾页、上一页、下一页。返回顶部等等很多功能。普通用户登录:发表作文,管理自己的作文,管理自己账号。管理员用户登录:发表作文,管理所有的作文,管理所有账号。数据库用的是sqlserver。丰富精美的css、js效果。2.效果截图:登录/注册没登录时的基础首页普通用户:左边的侧边栏可以随意显示隐藏。管理员:3.项目文件截图:

    2022年10月31日
  • c语言oj平台作业,OJ平台C语言习题答案.pdf

    c语言oj平台作业,OJ平台C语言习题答案.pdfOJ平台C语言习题答案return0;}★★★★★★★★★★用指针编写一个程序,输入字符串后,统计其中各种字符的个数,输出其中大小编写一个函数,功能是使输入的字符串逆序输出。…

  • ASP.NET_动态网页怎么连接数据库

    ASP.NET_动态网页怎么连接数据库近期本人在关注实体设计的过程中一直在了解“ADO.NETEntityFramework数据模型”,从中结识了.NETFramework4中的ASP.NET动态数据,ASP.NET动态数据允许您通过在运行时从数据库架构推断数据实体的外观和行为并从中派生UI行为,创建可扩展的、数据驱动的Web应用程序。         动态数据的一个重要功能是基架机制

    2022年10月31日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号