欢迎来到天天文库
浏览记录
ID:62074739
大小:3.44 MB
页数:76页
时间:2021-04-14
《最新Rational-Purify使用教程精讲幻灯片.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Rational-Purify使用教程精讲目录Purify概述Purify具体功能描述Purify使用举例Purify主要参数设置Purify概述程序代码中,与内存有关的问题可以分成两大类:内存访问错误和内存使用错误。内存访问错误包括读内存错误和写内存错误。读内存错误可能让程序模块返回意想不到的结果,从而导致后续的程序模块运行异常。内存使用错误主要是指程序模块申请的内存没有正确释放,系统可用内存逐渐减少,使程序运行逐渐减慢,直至停止。可检查的错误类型堆阵相关错误如未初始化内存的读取和复制错误,以及数
2、组越界读写错误)堆栈相关错误如未初始化内存的读取和复制错误,以及堆栈越界读写错误)垃圾内存收集Java代码中相关的内存管理问题COM相关错误如COMAPI/接口调用失败可检查的错误类型(续)指针错误如无效指针和空指针的读写错误内存使用错误如释放内存的读写错误、内存泄漏和释放内存匹配错误WindowsAPI相关错误如WindowsAPI函数参数错误和返回值错误句柄错误如泄漏和句柄使用错误可检测的错误代码ActiveX(OLE/OCX)控件COM对象ODBC构件Java构件、applet、类文件、JAR
3、文件可检测的错误代码(续)VisualC/C++源代码VisualBasic应用程序内嵌的VisualC/C++构件第三方和系统DLL支持com调用的应用程序中的所有VisualC/C++构件测试信息说明信息色彩,Purify对源程序中有内存问题的代码使用不同的颜色标识。红色:内存块没有被分配和初始化蓝色:内存块已经被分配并且已初始化黄色:内存块已经被分配但是没有初始化测试信息说明(续)名称缩写注:下面是可引起内存不可读或不可写的名称缩写:ArrayBoundsRead(ABR):数组越界读Beyo
4、ndStackRead(BSR):堆栈越界读FreeMemoryRead(FMR):空闲内存读InvalidPointerRead(IPR):非法指针读NullPointerRead(NPR):空指针读UninitializedMemoryRead(UMR):未初始化内存读目录Purify概述Purify具体功能描述Purify使用举例Purify主要参数设置程序#includeusingnamespacestd;intmain(){char*str1="four";char*s
5、tr2=newchar[4];//没考虑字符串终止符" "也要占内存空间,导致后面数//组越界错误char*str3=str2;cout<6、2;str2[0]+=2;//FMRandFMW,对已经释放内存读以及对已经释放内存写(Free//MemoryRead、FreeMemoryWrite)deletestr3;//FFM,再次释放已经被释放的空间(FreeFreedMemory)return0;}第一步:启动Purify第二步:在Purify中运行被测程序选择File菜单中的Run命令后,出现如图3-2所示的RunProgram对话框第三步在Programname中选择被测对象exp11.exe后,点击“Run”,运行程序。运行前选7、择工作目录,工作目录默认为被测程序所在的目录;如果被测程序有命令行参数,在Command-linearguments项中输入;在Collect项中选择要收集的信息类别;选择是否在调试器下运行程序运行结束,出现Purify检测结果如下测试结果结果说明通过此窗口,可以看到在程序运行期间检测到的与内存有关的错误:第3、4、5行,黄色标注读未初始化内存(UMR)第6、8行,红色标注数组越界导致内存不可读(ABR)第7行,红色标注数组越界导致内存不可写(ABW)第9行,红色标注对已经释放的内存读(FMR)第18、0行,红色标注对已经释放的内存写(FMW)第11行,红色标注再次释放已经释放的内存(FFM)其他行,蓝色标注运行过程信息和测试摘要信息。结果说明(续)双击DataBrowser窗口中的错误或提示前面的“+”号,可以看到该错误的详细信息。如果被测程序包含源代码,则在该错误的详细信息中列出错误的代码行并解释造成错误的原因。例如,点击第7行前面的“+”号,会展开如图3-4所示的错误说明。其中,ABW指明了错误类型,Errorlocation指出错误在源代码中的位置,Allo
6、2;str2[0]+=2;//FMRandFMW,对已经释放内存读以及对已经释放内存写(Free//MemoryRead、FreeMemoryWrite)deletestr3;//FFM,再次释放已经被释放的空间(FreeFreedMemory)return0;}第一步:启动Purify第二步:在Purify中运行被测程序选择File菜单中的Run命令后,出现如图3-2所示的RunProgram对话框第三步在Programname中选择被测对象exp11.exe后,点击“Run”,运行程序。运行前选
7、择工作目录,工作目录默认为被测程序所在的目录;如果被测程序有命令行参数,在Command-linearguments项中输入;在Collect项中选择要收集的信息类别;选择是否在调试器下运行程序运行结束,出现Purify检测结果如下测试结果结果说明通过此窗口,可以看到在程序运行期间检测到的与内存有关的错误:第3、4、5行,黄色标注读未初始化内存(UMR)第6、8行,红色标注数组越界导致内存不可读(ABR)第7行,红色标注数组越界导致内存不可写(ABW)第9行,红色标注对已经释放的内存读(FMR)第1
8、0行,红色标注对已经释放的内存写(FMW)第11行,红色标注再次释放已经释放的内存(FFM)其他行,蓝色标注运行过程信息和测试摘要信息。结果说明(续)双击DataBrowser窗口中的错误或提示前面的“+”号,可以看到该错误的详细信息。如果被测程序包含源代码,则在该错误的详细信息中列出错误的代码行并解释造成错误的原因。例如,点击第7行前面的“+”号,会展开如图3-4所示的错误说明。其中,ABW指明了错误类型,Errorlocation指出错误在源代码中的位置,Allo
此文档下载收益归作者所有