Rational Purify
先补充一点内存泄漏的错误认识,认为泄漏的内存在程序退出后操作系统不能回收的认识是错误的,只要程序退出操作系统会回收一切它给程序分配的资源,一般操作系统都是用伙伴系统管理内存分配,每块分配出去的内存都是拥有操作系统的标记的,只要使用该块内存的程序退出,就能回收分配给程序的内存。内存泄漏最大的问题就是不断吞噬操作系统内存,如果程序一直运行最后可能导致操作系统再无内存可分配。
Rational Purify for Windows 能自动找出Visual C/C++和Java 代码中与内存有关( 如内存错误、内存泄漏等)的错误,确保整个应用程序的质量和可靠性。在查找典型的Visual C/C++程序中的传统内存访问错误,以及Java 代码中与垃圾内存收集相关的错误方面。
1. 调试流程自动化,只需花费少量时间进行调试。Purify 还可以帮助及早找出致命或破坏性的内存访问错误,并能减少许多最后时刻的“救火”场面。
2. 对基于构件开发的程序进行全面调试,。用构件进行软件开发时,找出诸如内存未初始化、内存泄漏和内存覆盖等编程错误是特别困难的。必须对构件之间及构件内部的内存访问情况进行验证;使Purify 不但可以检查出编写的源代码中致命或破坏性的内存访问错误,而且还能检查出程序库中无权访问的源代码的错误。否有权访问其源代码,Purify 都能检查Microsoft 构件的问题,包括ActiveX控件、COM/DCOM 构件、ODBC 构件、DLL 、第三方构件以及C++或Java 构件。
3. 用powercheck 定制错误检查规则,可以按模块逐个调整所需的检查级别。这样可以把精力集中在最重要的代码上。简单选择“最小”或“准确”即可。“最小”插桩可以快速查出常见的运行写入错误和Windows API 错误;对于关键模块,“准确” 插桩检查将用行业强度检查来查找内存访问错误,这样就可以确定调试的优先级并更有效地工作
4. 通过对 api 掉用的验证扩展错误检查,在Windows 应用程序中,Windows API调用都是其重要的组成部分。一个应用程序可能使用成千上万次的Windows API 调用和COM 方法。存在内存访问错误的WindowsAPI 调用,可能会导致应用程序运行不正常或崩溃。对于Windows API 的检查,Rational Purify 的WinCheck 功能会验证直到最后一次WindowsAPI 和COM 方法的调用情况,包含GDI 句柄检查和对Windows 资源泄漏及错误指针等检查。
5. 跟 Microsoft Visual Studio 集成在一起,可以快速获得Purify 的自动调试以及源代码编辑功能。Purify 带有既时调试功能,从而缩短查找、复审和修正错误所需的时间。
6. Rational Purify 是对即将发布的实际C++工作版本或在无法获得源代码的情况下进行测试。无需特殊的工作版本或源代码即可发挥作用。
7. 在所有可能的地方查找错误,Rational Purify 除了能找出运行程序时发生的关键错误,还能告诉测试程序的代码覆盖率。如果安装了Rational PureCoverage,Purify 则可以自动收集每次运行的代码覆盖数据,并报告已检查过的代码数量。将Purify 的错误检测和 PureCoverage 的代码覆盖分析结合在一起。
以下情况可引起内存的不可读或不可写
Array Bouds Read (ABR): 数组越界。
Beyond Stack Read (BSR):堆栈越界。
Free Memory Read (FMR): 空闲内存阅读。
Invalid Pointer Read(IPR): 非法指针阅读。
Null Pinter Read (NPR):空指针阅读。
Uninitialized Memory Read (UMR):未初始化内存阅读。
双击 Data Browser 窗口中的任何一个错误或提示前面的+ 号,就可以看到该错误的详细信息。如果被测程序包含源代码,则在错误的详细信息中列出错误的代码行并解释所造成的错误,相同的错误可能出显几次,特别是循环中的错误,可以通过设置Filter Manager 设置只显示自己目前要处理的错误类性
可以比较或着合并相同程序的测试结果:
在 Data Brower 里还可以把错误信息直接提交到ClearQuest
8. 可以检测的错误代码:
•ActiveX (OLE/OCX)控件
•COM 对象
•ODBC 构件
•Java 构件、applet 、类文件、JAR 文件
•DLL —包括MFC 和Microsoft Office插件
•Visual C/C++源代码
•Visual Basic应用程序内嵌的VisualC/C++构件
•第三方和系统DLL
•支持com 调用的应用程序中的所有Visual C/C++构件
9. 检查的错误类型有
•堆阵相关错误(例如:未初始化内存的读取和复制错误,以及数组越界读写错误)
•堆栈相关错误(例如:未初始化内存的读取和复制错误,以及堆栈越界读写错误)
•垃圾内存收集—Java 代码中相关的内存管理问题
•COM 相关错误(例如:COM API/接口调用失败)
•指针错误(例如:无效指针和空指针的读写错误)
•内存使用错误(例如:释放内存的读写错误、内存泄漏和释放内存匹配错误)
•Windows API 相关错误(例如:Windows API 函数参数错误和返回值错误)
•句柄错误(例如:泄漏和句柄使用错误)