一、BoundsChecker
其实你还不晓得大名顶顶的Nu-Mega,但一定据说过她们的产品SoftICE,BoundsChecker也是这家公司的产品。与VisualC++配合使用,听说威力强悍。本人和没有实际用过,在此复制一下百度百科的简介硬盘安装linux,好有个简单的认识。
BoundsChecker是一个运行时错误检查工具,它主要定位程序运行时期发生的各类错误。它通过留驻在VisualC++开发环境内部的手动处理调试程序来加速应用程序的开发,减短产品发布时间。BoundsChecker对于编程中的错误(大多数是C++中特有的)提供了清晰的详尽的剖析。它才能测量和确诊出在静态,堆栈显存中的错误以及显存和资源泄露问题。在运行状态下BoundsChecker验证超过8700APIs和OLE方式,包括最新的WindowsAPIs,ODBClinux手机软件,ActiveX,DirectX,COM和InternetAPIs。
BoundsChecker采用一种被称为CodeInjection的技术,来查获分配显存和释放显存函数的调用。简单的说,当你的程序开始运行时,BoundsChecker的DLL被手动载入进程的地址空间,之后它会更改进程中分配和释放显存的函数的调用,让那些调用首先转到它的代码。BoundsChecker在做这种动作时,无需更改被调试程序的源代码或工程配置文件,这促使它使用特别的简便、直接。
程序员在开发过程中可能会时常遇见这样的问题:调试时句型没有问题,代码也没有错误,但程序运行就是不正常甚至关机,虽然这有可能是逻辑错误造成的显存溢出或资源泄漏等问题。这种错误通常是不容易测量下来的。而这种错误就是BoundsChecker错误检查之一。
通过对被测程序的操作,BoundsChecker提供详尽的,清晰的错误剖析;手动查明静态的堆栈错误及显存、资源泄露,而且还能迅速定位出错的源代码,就算在没有源代码的情况下也能检测第三方组件的错误。
BoundsChecker能测量的错误包括:
(1)表针操作和显存、资源泄露错误
例如:显存泄漏;资源泄露;对表针的错误操作。
(2)显存操作方面的错误
例如:显存读、写溢出;使用为初始化的显存。
(3)API函数使用错误
二、Valgrind
Valgrind是一款守GNU通用公共许可证条款的自由软件,主要用于显存调试、内存泄露检查以及性能剖析。Valgrind这个名子取自北欧神话中英灵殿的入口。最初作者是JulianSeward,他于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/DarwinandAMD64/Darwin(MacOSX10.6and10.7)等操作系统。
Valgrind工具鞋子含多个工具:
1.Memcheck工具主要检测下边的程序错误:
使用未初始化的显存(Useofuninitialisedmemory)
使用早已释放了的显存(Reading/writingmemoryafterithasbeenfree’d)
使用超过malloc分配的显存空间(Reading/writingofftheendofmalloc’dblocks)
对堆栈的非法访问(Reading/writinginappropriateareasonthestack)
申请的空间是否有释放(Memoryleaks–wherepointerstomalloc’dblocksarelostforever)
malloc/free/new/delete申请和释放显存的匹配(Mismatcheduseofmalloc/new/new[]vsfree/delete/delete[])
src和dst的重叠(Overlappingsrcanddstpointersinmemcpy()andrelatedfunctions)
2.Callgrind
Callgrind搜集程序运行时的一些数据,函数调用关系等信息内存测试软件 linux,还可以有选择地进行cache模拟。在运行结束时,它会把剖析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的方式。
3.Cachegrind
它模拟CPU中的一级缓存I1,D1和L2二级缓存,就能精确地强调程序中cache的遗失和命中。假如须要,它还能否为我们提供cache遗失次数,显存引用次数,以及每行代码,每位函数,每位模块,整个程序形成的指令数。这对优化程序有很大的帮助。
4.Helgrind
它主要拿来检测多线程程序中出现的竞争问题。Helgrind找寻显存中被多个线程访问,而又没有一贯加锁的区域,这种区域常常是线程之间丧失同步的地方内存测试软件 linux,并且会造成无法开掘的错误。Helgrind实现了名为”Eraser”的竞争检查算法,并做了进一步改进,降低了报告错误的次数。
5.Massif
堆栈剖析器,它能检测程序在堆栈中使用了多少显存,告诉我们堆块,堆管理块和栈的大小。Massif能帮助我们减小显存的使用,在带有虚拟显存的现代系统中,它还能否加速我们程序的运行,降低程序逗留在交换区中的概率。
三、GFlags和PageHeap
谷歌提供的一套工具,在此不过多解释了,搜集几个文档位置,供参考。
1.msdnGFlags工具相关主题
2.怎样在WindowsXP和Windows2000中使用Pageheap.exe(谷歌帮助和支持文章编号:286470)
3.怎样使用PageHeap实用程序来检查MicrosoftVisualc++项目中的显存错误(谷歌帮助和支持文章编号:264471)
4.CSDNrj20092010文章:探讨MFC显存泄漏检查及显存越界访问保护机制