目的

本工具向导提供了有关如何使用 Purify 在 Visual C/C++ 程序中查找运行时错误的概述。有关 Purify 的更多信息,请参阅 Getting Ahead with Rational Purify。有关使用 Purify 的分步操作步骤的详细信息,请参见 Purify 联机帮助。

相关的 Rational Unified Process 活动:活动: 执行单元测试的“执行单元测试”部分。

概述

Purify 不仅可以在代码中,而且可以在软件使用的构件中,甚至可以在没有源代码的情况下,检测到包括内存丢失在内的运行时错误。它报告的内存错误有,数组边界错误、使用虚悬指针访问、未初始化的内存读取、内存分配错误和内存丢失等错误,借助于该报告,您可以在错误造成损失之前解决它们。如果您的系统上有 Rational PureCoverage,Purify 还可以报告您对代码检错的完全程度。要使用 Purify 来测试程序,请执行以下步骤:

    1. 使用 Purify 诊断并运行程序来收集错误和覆盖数据
    2. 分析 Purify 错误数据
    3. 纠正错误并重新运行程序

为确保整个程序都可以使用 Purify,还需执行下一步骤:

    1. 分析 Purify 覆盖数据来发现未测试代码

工具步骤

  1. 使用 Purify 诊断并运行程序来收集错误和覆盖数据 

使用 Purify 检测代码的第一步是诊断和运行您的程序。

在 Microsoft Developer Studio 97 或更高版本的 Microsoft Developer Studio 中,启动 Purify。如果系统已安装了 PureCoverage,请设置 Purify 来收集覆盖数据。然后运行要用 Purify 来检错的程序。或者,如果您没有使用和 Developer Studio 集成的 Purify,只需在 Purify 中运行该程序即可。为了检测错误和收集覆盖数据,Purify 将在准备阶段中诊断您的代码。

尽管 Purify 为每个构件提供了默认的诊断级别,但您还是可以使用设置对话框中的 PowerCheck 选项卡来设置定制的诊断级别。您还可以设置选项来控制 Purify 如何处理错误数据。例如,您可以指定 Purify 是否记录和显示“未初始化内存复制”(UMC) 消息,您也可以指定用于记录错误和分配的调用堆栈长度。

在诊断过程中,Purify 复制可执行文件及其相关模块,使用对象代码插入 (OCI) 技术,向代码中插入它用来检测错误和监测覆盖的指令。 当 Purify 诊断可执行文件和模块时,它将向您显示诊断的进度。

诊断之后,Purify 将启动诊断过的程序。运行该程序时,Purify 将显示一个“Data Browser”窗口,其中有一个“Error View”选项卡,该选项卡中包含了关于检测到的运行时错误的详细诊断信息。

退出该程序时,Purify 将报告内存丢失。您可以指定其他设置,以使 Purify 可以在退出时仍然可以报告使用中的内存和句柄的有关情况。

提示:除了交互地使用 Purify,您还可以将 Purify 并入测试脚本、makefile 和批处理文件,以自动进行测试。有关详细信息,请参见 Purify 联机帮助索引中的 scripts

是否需要更多信息?请在 Purify 联机帮助索引中,查阅 instrumenting,running programs powercheck

  1. 分析 Purify 错误数据 

使用 Purify 检测代码的第二步是分析 Purify 错误数据。

默认情况下,错误视图最初只显示每则消息的第一行。这种精简形式使您可以轻松地浏览这些消息、迅速确定关键错误和评估程序的状态。您可以将这些概要信息展开,查看更加详细的诊断信息。

使用这一错误视图信息,您可以确定、理解并排除难以发现的内存访问错误和内存丢失。如果在诊断该程序时,可以调试和重新分配数据,您还能够检查源代码。因为 Purify 在存取错误的发生点检测到这些错误,并在错误视图中显示有关消息,所以您可以轻松地跟踪并排除这些错误。

因为一个大程序可能会产生数百条错误消息,为了隐藏一些消息并帮助您关注那些最关键的错误,Purify 提供了过滤器。

提示:如果将 Purify 合并到测试脚本、makefile 和批处理文件中,您可以自动将错误消息保存到一个 ASCII 文本文件中。有关详细信息,请参见 Purify 联机帮助索引中的 scripts

是否需要更多信息?请在 Purify 的联机帮助索引中,查阅 error messages,error viewfilters

  1. 纠正错误并重新运行程序 

使用 Purify 检测代码的第三步是纠正错误并重新运行程序。

要纠正错误,可双击发生错误的行。Purify 将在编辑器中打开发生错误处的源代码,以备您进行纠正。

在纠正并重新构建程序后,您可以通过重新运行更新的程序,比较新的运行结果和前一次的运行结果,来核实所作纠正。 重复诊断、运行、分析和纠正的循环流程,直到程序运行无误为止。

您可以使用 Navigator 窗口在两个运行的程序之间切换,以便跟踪正在检测的所有运行程序。您还可以将错误视图数据保存为 Purify 数据文件,以便与安装了 Purify 的同事共享数据。

是否需要更多信息?请在 Purify 联机帮助索引中,查阅 source codesaving data

  1. 分析 Purify 覆盖数据来发现未测试代码 

如果您收集了程序运行的覆盖数据,您还可以发现 Purify 尚未检测的程序部分。无论错误在程序的什么地方发生,您都可以通过改进测试覆盖,检测到程序中的所有错误。

当您退出程序时,Purify 在 Data Browser 窗口中的 Module View、File View 和 Function List View 选项卡中显示覆盖数据。这些选项卡显示了许多信息,例如测试检测到的和遗漏的函数和行,以及检测到的和遗漏的函数及行所占的百分比。 如果可以调试行数据,并且您在行的级别上监测您的代码,您还可以使用“Annotated Source”窗口来逐行分析函数覆盖。

在显示覆盖数据前,Purify 将自动过滤掉相对不重要的覆盖数据,比如来自系统库的数据。您可以创建定制的过滤器,隐藏您不想见到的其他数据,以便可以充分关注重要的分析数据。

默认情况下,Purify 将自动在 Navigator 窗口中创建 Auto Merge 条目,这样您就可以很容易地分析多次运行的全部覆盖情况。您还可以自己合并特定的运行,查看多个选定运行的累积效果。

发现覆盖数据中的弱点后,您可以重新运行程序,并测试所有重要的部分,或者修改 makefile 或测试脚本,来进行更彻底的测试。此时可以确信,在尚未测试的代码中不存在导致意外问题的潜在错误。

提示:在自动测试中,您可以使用 /Coverage 和相关选项来与 Purify 一起收集覆盖数据。请在 Purify 联机帮助索引中,查阅 command line,options

是否需要更多信息?请在 Purify 联机帮助索引中,查阅 coverage data

 

© 1987 - 2001 Rational Software Corporation。版权所有。

分栏显示 Rational Unified Process

Rational Unified Process