b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

VisualC++错误及内存和资源泄漏问题的操作方法介绍

电脑杂谈  发布时间:2021-02-19 04:01:55  来源:网络整理

一、BoundsChecker

或许你还不知道大名顶顶的Nu-Mega,但一定听说过他们的产品SoftICE,BoundsChecker也是这家公司的产品。与Visual C++配合使用,据说威力强大。本人和没有实际用过,在此复制一下百度百科的简介,好有个简单的认识。

BoundsChecker是一个运行时错误检测工具,它主要定位程序运行时期发生的各种错误。它通过驻留在Visual C++开发环境内部的自动处理调试程序来加速应用程序的开发,缩短产品发布时间。BoundsChecker对于编程中的错误(大多数是C++中特有的)提供了清晰的详细的分析。它能够检测和诊断出在静态,堆栈内存中的错误以及内存和资源泄漏问题。在运行状态下BoundsChecker验证超过8700APIs和OLE方法,包括最新的Windows APIs,ODBC,ActiveX,DirectX,COM和Internet APIs。

BoundsChecker采用一种被称为Code Injection的技术,来截获分配内存和释放内存函数的调用。简单的说,当你的程序开始运行时,BoundsChecker的DLL被自动载入进程的地址空间,然后它会修改进程中分配和释放内存的函数的调用,让这些调用首先转入它的代码。BoundsChecker在做这些动作时,无需修改被调试程序的源代码或工程配置文件,这使得它使用非常的简便、直接。

程序员在开发过程中可能会经常遇到这样的问题:调试时语法没有问题,代码也没有错误,但程序运行就是不正常甚至死机,其实这有可能是逻辑错误引起的内存溢出或资源泄露等问题。这些错误一般是不容易检测出来的。而这些错误就是BoundsChecker错误检测之一。

通过对被测程序的操作,BoundsChecker提供详细的,清晰的错误分析;自动查明静态的堆栈错误及内存、资源泄漏,并且能够迅速定位出错的源代码,即使在没有源代码的情况下也能检查第三方组件的错误。

BoundsChecker能检测的错误包括:

(1)指针操作和内存、资源泄漏错误

比如:内存泄露;资源泄漏;对指针的错误操作。

(2)内存操作方面的错误

比如:内存读、写溢出;使用为初始化的内存。

(3)API函数使用错误

二、Valgrind

内存致命的错误_内存错误检测_内存校验错误

Valgrind是一款守GNU通用公共许可证条款的自由软件,主要用于内存调试、内存泄漏检测以及性能分析。Valgrind这个名字取自北欧神话中英灵殿的入口。最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。

目前的3.7.0版支持X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux, PPC64/Linux, S390X/Linux, ARM/Android (2.3.x), X86/Darwin and AMD64/Darwin (Mac OS X 10.6 and 10.7)等操作系统。

Valgrind工具包包含多个工具:

1. Memcheck 工具主要检查下面的程序错误:

使用未初始化的内存 (Use of uninitialised memory)

使用已经释放了的内存 (Reading/writing memory after it has been free’d)

使用超过 malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)

对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)

申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)

malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])

src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)

2. Callgrind

内存错误检测_内存校验错误_内存致命的错误

Callgrind收集程序运行时的一些数据,函数调用关系等信息,还可以有选择地进行cache 模拟。在运行结束时,它会把分析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的形式。

3. Cachegrind

它模拟 CPU中的一级缓存I1,D1和L2二级缓存,能够精确地指出程序中 cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每个函数,每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。

4. Helgrind

它主要用来检查多线程程序中出现的竞争问题。Helgrind 寻找内存中被多个线程访问,而又没有一贯加锁的区域,这些区域往往是线程之间失去同步的地方,而且会导致难以发掘的错误。Helgrind实现了名为” Eraser” 的竞争检测算法,并做了进一步改进,减少了报告错误的次数。

5. Massif

堆栈分析器,它能测量程序在堆栈中使用了多少内存,告诉我们堆块,堆管理块和栈的大小。Massif能帮助我们减少内存的使用,在带有虚拟内存的现代系统中,它还能够加速我们程序的运行,减少程序停留在交换区中的几率。

三、GFlags 和 PageHeap

微软提供的一套工具,在此不过多解释了,收集几个文档位置,供参考。

1.msdn GFlags工具相关主题

2.如何在 Windows XP 和 Windows 2000 中使用 Pageheap.exe(微软帮助和支持文章编号:286470)

3.如何使用 PageHeap 实用程序来检测 Microsoft Visual c + + 项目中的内存错误(微软帮助和支持文章编号:264471)

4. CSDN rj20092010 文章:浅谈MFC内存泄露检测及内存越界访问保护机制


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-358738-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 爱新觉罗努尔哈赤
        爱新觉罗努尔哈赤

        怎么感觉luna高了呢@ZHAYITING

      热点图片
      拼命载入中...