Rational_Purify使用教程.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

使用RationalPurify清华大学出版社目录Purify概述Purify具体功能描述Purify使用举例Purify主要参数设置Purify概述程序代码中,与内存有关的问题可以分成两大类:内存访问错误和内存使用错误。内存访问错误包括读内存错误和写内存错误。读内存错误可能让程序模块返回意想不到的结果,从而导致后续的程序模块运行异常。内存使用错误主要是指程序模块申请的内存没有正确释放,系统可用内存逐渐减少,使程序运行逐渐减慢,直至停止。Purify概述(续)Purify使用具有专利的OCI(ObjectCodeInsertion,目标代码插入)技术,在被测试的目标程序中插入一些函数,这些函数主要是内存检测的语句。这些语句放置在程序代码中所有内存操作之前,一旦在程序运行时发现内存问题,它们就会报告问题信息。Purify主要检测以下类型的内存错误:数组内存是否越界读/写、是否使用了未初始化的内存、是否对已释放的内存进行读/写、是否对空指针进行读/写、内存泄漏等。RationalPurify能自动找出错误的准确来源和位置,如果有源代码,可以从Purify中启动相应的编辑器,快速修复错误。RationalPurify可以从功能、可靠性和性能等多个方面反映应用程序的质量。Purify的特色提供了一套内存使用状况分析工具,自动找出VisualC/C++和Java代码中与内存有关的错误Purify的WinCheck功能会检查应用程序每次COM方法和WindowsAPI的调用,包括GDI句柄检查和Windows资源泄漏及错误指针的检查RationalPurify不但能检查可访问源代码的内存错误,还能检查程序库中无权访问的源代码错误。使用Purify的PowerCheck功能可以定制错误检查规则,可以按模块调整所需的检查级别。RationalPurify与MicrosoftVisualStudio集成,程序员在开发工具中就可以获得Purify的自动调试以及源代码编辑功能。目录Purify概述Purify具体功能描述Purify使用举例Purify主要参数设置可检查的错误类型堆阵相关错误如未初始化内存的读取和复制错误,以及数组越界读写错误)堆栈相关错误如未初始化内存的读取和复制错误,以及堆栈越界读写错误)垃圾内存收集Java代码中相关的内存管理问题COM相关错误如COMAPI/接口调用失败可检查的错误类型(续)指针错误如无效指针和空指针的读写错误内存使用错误如释放内存的读写错误、内存泄漏和释放内存匹配错误WindowsAPI相关错误如WindowsAPI函数参数错误和返回值错误句柄错误如泄漏和句柄使用错误可检测的错误代码ActiveX(OLE/OCX)控件COM对象ODBC构件Java构件、applet、类文件、JAR文件可检测的错误代码(续)VisualC/C++源代码VisualBasic应用程序内嵌的VisualC/C++构件第三方和系统DLL支持com调用的应用程序中的所有VisualC/C++构件测试信息说明信息色彩,Purify对源程序中有内存问题的代码使用不同的颜色标识。红色:内存块没有被分配和初始化蓝色:内存块已经被分配并且已初始化黄色:内存块已经被分配但是没有初始化测试信息说明(续)名称缩写注:下面是可引起内存不可读或不可写的名称缩写:ArrayBoundsRead(ABR):数组越界读BeyondStackRead(BSR):堆栈越界读FreeMemoryRead(FMR):空闲内存读InvalidPointerRead(IPR):非法指针读NullPointerRead(NPR):空指针读UninitializedMemoryRead(UMR):未初始化内存读目录Purify概述Purify具体功能描述Purify使用举例Purify主要参数设置程序#includeiostreamusingnamespacestd;intmain(){char*str1=four;char*str2=newchar[4];//没考虑字符串终止符\0也要占内存空间,导致后面数//组越界错误char*str3=str2;coutstr2endl;//UMR,str2没有赋值,对未初始化的内存读(Uninitialized//MemoryRead)strcpy(str2,str1);//ABW,str2空间不足,数组越界写(ArrayBoundsWrite)coutstr2endl;//ABR,str2空间不足,数组越界读(ArrayBoundsRead)deletestr2;str2[0]+=2;//FMRandFMW,对已经释放内存读以及对已经释放内存写(Free//MemoryRead、FreeMemoryWrite)deletestr3;//FFM,再次释放已经被释放的空间(FreeFreedMemory)return0;}第一步:启动Purify第二步:在Purify中运行被测程序选择File菜单中的Run命令后,出现如图3-2所示的RunProgram对话框第三步在Programname中选择被测对象exp11.exe后,点击“Run”,运行程序。运行前选择工作目录,工作目录默认为被测程序所在的目录;如果被测程序有命令行参数,在Command-linearguments项中输入;在Collect项中选择要收集的信息类别;选择是否在调试器下运行程序运行结束,出现Purify检测结果如下测试结果结果说明通过此窗口,可以看到在程序运行期间检测到的与内存有关的错误:第3、4、5行,黄色标注读未初始化内存(UMR)第6、8行,红色标注数组越界导致内存不可读(ABR)第7行,红色标注数组越界导致内存不可写(ABW)第9行,红色标注对已经释放的内存读(FMR)第10行,红色标注对已经释放的内存写(FMW)第11行,红色标注再次释放已经释放的内存(FFM)其他行,蓝色标注运行过程信息和测试摘要信息。结果说明(续)双击DataBrowser窗口中的错误或提示前面的“+”号,可以看到该错误的详细信息。如果被测程序包含源代码,则在该错误的详细信息中列出错误的代码行并解释造成错误的原因。例如,点击第7行前面的“+”号,会展开如图3-4所示的错误说明。其中,ABW指明了错误类型,Errorlocation指出错误在源代码中的位置,Allocationlocation指出错误的内存分配位置结果说明(续)结果说明(续)继续点击Errorlocation前面“+”号后,再点击main前面的“+”号,出现下如图所示的错误位置提示。结果说明(续)保存测试信息。在工作目录中生成一个.pfy文件,其中保存了DataBrowser窗口中的数据,以便进行数据共享。无论是否保存测试信息,都将在工作目录中生成一个文本文件,形成测试日志。目录Purify概述Purify具体功能描述Purify使用举例Purify主要参数设置Settings项中的defaultsettingErrorandLeaks标签,用于设置内存错误和泄漏参数。Showfirstmessageonly:仅在相同的错误第一次出现时显示相关信息。ShowUMCmessage:显示UMC(UninitializedMemoryCopy)信息,默认情况下,Purify不显示UMC信息。Memoryleaks:程序退出时报告内存泄漏信息。Memoryinuse:程序退出时报告内存使用情况信息。Handlesinuse:程序退出时报告句柄使用情况信息。Showmaximumcallstackdetail:显示最大调用堆栈信息。Lengthforerror:设置错误堆栈长度。Lengthforallocation:通过设置Purify最大调用堆栈层数,确定与程序中发现的错误一致的内存分配位置。Deferredfreequeue:延迟自由队列。Length:延迟自由队列长度。Threshold:保留在延迟自由队列中内存块大小设置,超过该尺寸的内存块被立即释放,而不会保留在延迟自由队列中。Redzonelength:设置亏损区长度。PowerCheck标签,定制错误检查规则Themoduledoesn’tcontaindebugginginfo:检查不包含调试信息的模块Themoduleislarger……KB:只检查大于……K字节的模块Defaultcoveragelevel:对于同时进行的代码覆盖分析,此处设置覆盖级别,如“代码行”或“函数”,以便更好地控制错误检查和数据覆盖。Line:覆盖级别为代码行。Function:覆盖级别为函数。ExcludeallmodulesinWindowsdirectory:排除所有Windows目录下的模块。Files标签设置相关文件的路径及填写附加信息Advanced标签Leakscaninterval:被测程序发生内存泄漏后,设置Purify报告内存泄漏信息等待的时间。如果设置为0,Purify仅在被测程序退出时一次性报告所有内存泄漏信息Settings项中的PreferencesRuns标签Workspace标签JVM标签SourceCode标签Runs标签Showinstrumentionprogress:对本地非托管代码测试时,是否显示检测对话框。Showinstrumentionwarnings:对本地非托管代码测试时,在不同的程序文件中多次检测到相同的警告信息,是否每次都显示警告信息对话框。如果希望Purify在发现警告信息后能够持续检测,不选择此项,可以随后在属性窗口的日志标签中查看此类警告信息。ShowLoadLibraryinstrumentionprogress:对VC++、VB等本地代码进行测试,当工具文件需要调用工具列表时,是否显示工具对话框。Confirmrunconcellation:点击File菜单下CancelRun命令或者点击按钮中途取消运行时,是否每次都显示确认消息。Runs标签(续)Createautomaticmerge:创建自动合并。Usedefaulefilterset:下次运行本地非托管代码,是否使用当前的过滤器设置。Usecasesensitivepathname:设置Purify对路径名是否区分大小写。Breakonwarningsinadditiontoerror:测试本地非托管代码时,选择此项,无论错误还是警告出现,Purify都会中断并启动查错工具;不选择此项,仅仅错误出现时Purify才会中断并启动查错工具,同时,启动“Usethefollowingdebugger”中用户指定的调试器调试错误代码,如果没有指定调试器,则使用系统中注册的调试器。注意:Purify不支持VisualStudio.NET作为本地非托管代码的调试器。Usethefollowingdebugger:设置用户指定的调试器。Workspace标签Workspace标签(续)ShowWelcomeScreenatstartup:独立启动Purify软件时,每次显示欢迎窗口。Purify与VisualStudio集成使用时,不管此处如何设置,都不显示欢迎窗口。Showdirectoriesinfilenames:在输出窗口显示文件名时,是否同时显示该文件的路径。Usesounds:出现下列事件时,是否播放提示音:错误、警告、欢迎屏幕、检测开始、检测结束、程序开始、程序结束。Warnonunsaveddata:关闭或退出一个没有保存测试数据的程序时,是否显示警告消息对话框。Expandcallstacks:选择此项后,用户点击错误窗口中的“+”图标查看错误时,Pu

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功