Visual studio内存泄露检查工具--BoundsChecker

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

BoundsChecker能检测的错误包括:

       1)指针操作和内存、资源泄露错误,比如:内存泄露;资源泄露;对指针变量的错误操作。
    2)内存操作方面的错误,比如:内存读、写溢出;使用未初始化的内存。   

       3)API函数使用错误。

    使用BoundsChecker对程序的运行时错误进行检测,有两种使用模式可供选择。一种模式叫做ActiveCheck,一种模式叫做FinalCheck。下面分别进行介绍。
    1)ActiveCheck是BoundsChecker提供的一种方便、快捷的错误检测模式,它能检测的错误种类有限,只包括:内存泄露错误、资源泄露错误、API函数使用错误。
    要想使用ActiveCheck模式来检测程序的运行时错误,只需在VC++集成开发环境中打开BoundsChecker功能,然后从调试状态运行程序即可。此时ActiveCheck会在后台自动运行,随时检测程序是否发生了错误。下面说一下具体的使用步骤。
    首先,在VC++集成开发环境中打开你要对其进行测试的程序,同时保证项目处于Debug编译状态下。

   其 次,确保VC++集成开发环境中[BoundsChecker/Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于被选中的状态。只有这两项被选中,BoundsChecker才会在程序运行过程中发挥作用。
最后,在VC++集成开发环境中选择[Build/ Start Debug/Go]菜单命令,在Debug状态下运行程序,ActiveCheck也在后台开始运行了。
     2)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模式下没什么区别。具体步骤如下:

确保VC++集成开发环境中[BoundsChecker/ Integrated Debugging]菜单项和[BoundsChecker/Report Errors and Events]菜单项处于选中状态。     好 了,BoundsChecker在FinalCheck模式下的使用也介绍完了。ActiveChecker、FinalCheck这两种模式,比较而言 各有长短。ActiveChecker使用方便,只需在Debug状态下直接运行程序即可,并且程序的运行速度较快,但检测的错误种类有限; FinalCheck模式下,需要使用BoundsChecker的编译连接器重新编译连接生成可执行程序,并且程序的运行速度比较慢,但检测的错误种 类、提供的错误相关信息要多于ActiveChecker。所以,何时使用何种模式,应根据当时的具体情况而定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】如何用Maven创建web项目(具体步骤)

使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 war的形式 由于packing是war包,那么下面也就多出了webapp的目录 由于我们的项目要使用eclipse发…

CST光源控制卡简单操作C#程序

namespace Machine {class LightCST{private SerialPort serialPort ;public LightCST(){serialPort = new SerialPort();}

可能是目前最详细的Redis内存模型及应用解读

Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型:字符串、哈希、列表、集合、有序集合。丰富…

bootcmd 和bootargs

看到这个标题,可能觉得这个并没有什么的,其实不然,编好了u-boot了,但是如何来使用确不是那么简单的,想当初我将uboot制作出来后以为全部都搞定了,屁颠屁颠的烧到板子上后可系统就是起不来,为什么…

名词解释(容器、并发,插件,脚本)及程序对象的创建和注释文档

一、专有名词 1‘  容器 创建一种对象类型,持有对其他对象的引用,被称为容器的新对象。在任何时候都可以扩充自己以容纳置于其中的所有东西。 java在其标准类库中包含了大量的容器。在某些类库中,一两个通用容器足以满足所有的需要&#xf…

POJ 1696 Space Ant 极角排序(叉积的应用)

题目大意:给出n个点的编号和坐标,按逆时针方向连接着n个点,按连接的先后顺序输出每个点的编号。 题目思路:Cross(a,b)表示a,b的叉积,若小于0:a在b的逆时针方向,若大于0a在…

C#模板匹配创建模板与查找模板函数

class ShapeModulInspect{/// <summary>/// /// </summary>/// <param name="InspectImg">图像</param>/// <param name="ModulRoi">ROI</param>/// <param name="AngleStart">起始角</param>/…

SuperMap iDesktop之导入数据

SuperMap作为一个平台软件有自己的数据格式&#xff0c;现要将ESRI的SHP数据导入到SuperMap的udb数据库中&#xff0c;可以完成导入&#xff0c;但也不得不说几点问题。 下面是ArcGIS中批量导入SHP的操作界面。 比较分析 &#xff08;1&#xff09;界面简洁性 明显ArcGIS要简洁…

Ajax教程

AJAX AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。 AJAX 是与服务器交换数据并更新部分网页的艺术&#xff0c;在不重新加载整个页面的情况下。 AJAX 是一种在…

dm365 resize

DM368支持视频的缩放功能&#xff0c;例如DM365可以编码一个720P的&#xff0c;同时可以以任意分辨率&#xff08;小于720P的分辨率&#xff09;输出。其中有两种模式&#xff1a;IMP_MODE_SINGLE_SHOT&#xff0c;IMP_MODE_CONTINUOUS. 在用dm365的时候&#xff0c;用resizer…

SSH

http://www.cnblogs.com/hoobey/p/5512924.html struts --- 控制器 hibernate 操作数据库 spring 解耦 Struts 、 spring 、 Hibernate 在各层的作用 1 &#xff09; struts 负责 web 层 . ActionFormBean 接收网页中表单提交的数据&#xff0c;然后通过 Action 进…

C#halcon点拟合圆形函数

public bool FitCircle(double[] X, double[] Y, out double RcX, out double RcY, out double R){t

MyBatis 实践 -配置

MyBatis 实践标签&#xff1a; Java与存储 Configuration mybatis-configuration.xml是MyBatis的全局配置文件(文件名称随意),其配置内容和顺序例如以下: properties : 属性(文件)载入/配置settings : 全局配置參数typeAliases : 定义类型别名typeHandlers : 类型处理器objectF…

DM365视频处理流程/DM368 NAND Flash启动揭秘

DM365的视频处理涉及到三个相关处理器&#xff0c;分别是视频采集芯片、ARM处理器和视频图像协处理器&#xff08;VICP&#xff09;&#xff0c;整个处理流程由ARM核协调。视频处理主要涉及三个处理流程&#xff0c;分别是视频采集、视频编码和对编码后的视频的处理&#xff0c…

系统的Drawable(四)-LayerListDrawable

系统的Drawable(四)-LayerListDrawable 学习自 https://blog.csdn.net/u014695188/article/details/52815444 LayerListDrawable 漫谈 使用layer-list可以将多个drawable按照顺序层叠在一起显示&#xff0c;默认情况下&#xff0c;所有的item中的drawable都会自动根据它附上vie…

图像处理:镜头频率(衍射极限) 和 相机采样:显微镜的采样定理

采样定理大家都知道&#xff0c;相信不用多说。 我自己写下来给自己看。 下面&#xff0c;我总结 大家平时照相的镜头或者显微镜的物镜的情况下&#xff1a; 采样频率是指图像在数字化的时候的过程&#xff0c;实际上就是我们相机感光元件CCD或者CMOS的一个个小像元把模拟的连续…

【练习】使用事务控制语句

1.使用show engines 命令确定系统中是否有任何事务存储引擎可用以及哪个是默认引擎。 2.使用set autocommit 语句启用autocommit。 3.为使用world数据库做准备&#xff0c;确认city表使用事务存储引擎innodb。 4.使用start transaction 语句显式启动新事务。 5.删除一行。 6.使…

老男孩Day1作业(一):编写登录接口

要求&#xff1a;编写登录接口 1. 输入用户名和密码 2. 认证成功后显示欢迎信息 3. 输错三次后锁定 1&#xff09;编写思路 编写思路参考下面GitHub链接中的流程图 https://github.com/ChuixinZeng/PythonStudyCode/blob/master/PythonCode-OldBoy/Day1/作业/Day1_作业_登录接口…

hashcat源码分析1

typedef struct hash{void *digest;salt_t *salt;void *esalt;void *hook_salt; // additional salt info only used by the hook (host)int cracked;hashinfo_t *hash_info;char *pw_buf;int pw_len;} hash_t;一.1. 信号 函数&a…

Davinci及U-boot的一些介绍

TI推出的数字多媒体平台DM系列&#xff0c;集成了ARM与DSP双核处理器&#xff1a;DSP处理器运行DSP/BIOS操作系统&#xff0c;负责音视频编解码算法以及其他图形处理算法&#xff1b;ARM处理器运行MontaVista Linux操作系统&#xff0c;负责设备初始化、用户图形界面管理。ARM处…