本文来自于 Rational Edge:本文介绍了如何在 IDE 中,使用 IBM Rational PurifyPlus
for Linux and UNIX 的运行时分析工具来提高软件产品的质量和性能。本文是特别为 IBM Rational Systems
Developer V 7.0 用户撰写的。
本文是为 IBM® Rational® Systems Developer Version 7.0 (RSD)
的用户撰写的,介绍了如何在 RSD 中使用 IBM Rational PurifyPlus™ for Linux and
UNIX 系列的运行时分析工具来提高软件产品的质量和性能。Rational Systems Developer V7.0 利用了
Eclipse 的能力,并且帮助开发团队使用 UML 2 来创建良构的、模型驱动的基于 C/C++、Java™(J2SE™)和
CORBA® 的应用程序。Rational PurifyPlus for Linux and UNIX 是用于基于 Linux
和 UNIX 的 Java 和 C/C++ 开发的运行时分析工具集,它可以精确定位内存错误和泄漏、分析应用程序的性能,并且分析代码覆盖面。
RSD 支持三种主要的 C/C++ 工程类型:Managed Make、Standard Make 和 Remote Invocation。本文介绍了与每种类型的工程一起运行
PurifyPlus 的情况。在启动 RSD 之前,请确保 PurifyPlus 工具位于您的路径下。您可以通过在命令行运行“<tool
name> -version”来进行确认,<tool name> 是 purify、quantify,或
purecov。
“Managed Make”指的是 IDE 创建并管理 makefile 的工程类型。您通过利用 Project Properties
GUI 为您的工程指定适当的属性来控制 makefile 的特征。通过该 GUI,您可以指定不同类型的构建,例如,调试和发布构建。每个构建都是利用
Build Configuration 来指定的,并且 IDE 将为每个 Build Configuration 自动生成 makefile。
要对 Managed Make C++ 工程中创建的可执行工件调用 PurifyPlus 工具系列中的工具,您可以使用预构建的
Debug Build Configuration,并将其修改,让其调用您想要使用的 PurifyPlus 工具。
完成这项任务的步骤是:
- 打开 C/C++ Perspective,并来到 C/C++ Projects 窗格。
- 右键单击工程入口(“Shapes”是图 1 中所示的实例名称),并选择 Properties。
- 在 Properties 窗口中,从左边的列表中选择 C/C++ Build。
- 单击 Manage。
- 在 Manage 窗口中,单击 New,创建新的配置。您可以随意对其命名,在本实例中,我们选择了
purify。
- 在 Create configuration 窗口中,选择适当的配置来复制大部分属性。我们选择了 Debug
配置。
- 点击 OK 两次,直到您回到 Properties 窗口,如图 1 所示。
图 1:创建 Purify 配置
您的新配置应该出现在 Properties for <Project Name> 窗口的下拉列表中。为了让您的应用程序使用
Purify 构建,请选择 purify 配置,然后在 Tool Settings 选项卡中选择 GCC
C++ Linker。Command 字段应该为您的链接器命令命名,很可能是 g++。在这些字符前加上单词 purify
和一个空格,这样该命令就如显示的那样,为“purify g++”。当您把“purify”(或“quantify”,或 purecov)放在链接命令的开头时,PurifyPlus
工具将截取该命令,并装备所有被链接的文件。(装备是在 PurifyPlus 工具对 C/C++ 对象文件和库执行 Object
Code Insertion (OCI) 时进行的。)
图 2:定制链接命令,以利用 Purify 进行构建
现在选择 Build Settings 选项卡,并输入扩展名,以标识您的 Purify 的可执行工件。图 3 中的实例使用了
p。单击 Apply 来保存对新建配置的变更。
图 3:命名 Purify 的可执行工件
不论工程什么时候构建或重新构建,您都将在 Purify 中看到控制台输出,如图 4 所示。
图 4:Purify 中的控制台输出
要运行您的 Purify 程序,就在 Project 选项卡中列出的二进制代码那里,右键单击 Purify 的二进制代码(实例中的“Shapes.p”)。选择
Run As > Run Local C/C++ Application。Purify 窗口出现了,如图
5 所示。在您运行应用程序的时候,Purify 将显示出您的测试所暴露出的内存错误。当您退出程序时,Purify 将列出所有的内存泄漏。请参考
PurifyPlus 文档,了解更多高级的使用模式。当分析完 Purify 窗口中的错误之后,退出 Purify。只要 Purify
窗口是打开的,RSD 就会认为您的应用程序还处于活动状态。这是目前的一个限制。
图 5:Purify 显示出测试所暴露出的内存错误
当您希望使用现有的 makefile 或创建一个 makefile,并且在 IDE 不论怎样都不修改内容的情况下对它们进行管理时,“Standard
Make”是您要选择的工程类型。您定义了这些 makefile 的结构,并且控制例如有多少目标,以及它们如何分布的决策,可能在多个
makefile 之间。您还为工程的构建和清除定义了最高阶层的 make 目标。
图 6 展示出,我们已经导入了由 Quantify 加载的作为示例的 testHash 程序。右键单击 C/C++ Projects
选项卡中的 testHash,并且选择 Properties 菜单。出现了 Properties for
testHash 窗口。在此指定与 make 相关的信息 —— 最重要是,最高层的构建和清除的 make 目标。如图 6
所示,我们使用了默认值 all 和 clean。
图 6:使用加载为 Quantify 工具一部分的示例 testHash 程序
对于标准的 C/C++ 工程,您对 makefile 进行编辑,并且在构建中加入 PurifyPlus 工具作为额外的 make
目标。这个实例使用了 Rational Quantify,与在 Rational Purify 和 Rational PureCoverage
中应用的步骤相同。双击 C/C++ Projects 窗口中的 makefile。RSD 打开 makefile
用于编辑。为您计划用 Quantify 来监控的可执行工件复制连接目标和 make 规则,最好是两者的调试版本。通过在目标末尾添加“.q”来对其重新命名,并向链接行开头添加单词
quantify。您可能会定义一些宏,例如 QUANTIFY 和 QUANTIFYOPTIONS,来指定完整的路径和
Quantify 的选项。在图 7 中所示的 makefile 实例中,testHash.q 是构建 Quantify
程序的目标,并且它是包含 Quantify 的 testHash 目标的副本。任选地将新的 Quantify 目标包含入目标 all
中,为了在 all 被构建时,构建它。保存修改了的 makefile,如果有必要,强制构建相关的目标:all
或者只是新的 testHash.q 目标。查看控制台输出中的 Quantify 构建的详细情况,并确保构建是成功的。
图 7:将 Rational Quantify 作为额外的“make”目标加入
要运行新构建的 Quantify 应用程序,在 C/C++ Projects 中,右键单击 testHash.q,并在菜单中选择
Run As > Run ...。Run 窗口打开了,在 Arguments 选项卡中输入程序参数(如果有的话)。在
Run 窗口中单击 Run。在您的应用程序运行时,最高层的 Quantify 窗口出现了。当您的程序在运行的时候,只有
Help 按钮是有效的。一旦您的应用程序完成了,Function List、Call Graph,和
Exit 按钮就有效了。让您的程序运行一个测试用例,并且让其退出。通过打开 Call Graph,来打开您的
Quantify 分析,如图 8 所示,“River of Time”显示突出了消耗最多时间的代码路径。您可以双击这里列出的方法来查看进一步的详细情况,包括时间数据所标注的源代码。请参考
PurifyPlus 文档,以获得更多的信息。
图 8:运行新构建的 Quantify 应用程序
IBM Rational Software Developer (RSD) 允许您使用 GNU 调试器(GNU debugger,gdb)在远程的机器上运行并调试程序。即使在该模式下,您也可以用
Rational Purify、Quantify 或 PureCoverage 运行您的应用程序。由于 Quantify 为每个指令都测量机器循环的数量,所以当应用程序运行在远程机器上的
gdb 之下时,也能生成有用的数据。
这里介绍了如何对 Remote Invocation 工程使用 Rational PurifyPlus 工具:
- 用上面介绍的 Purify、Quantify 或 PureCoverage 在 RSD 中构建程序。
- 在 RSD 机器上:远程登录远程的机器。
- 在远程机器上:将 DISPLAY 设置为您的控制台,在程序目录下,对您装备的可执行工件运行 repure
命令。repure 命令对所装备的程序进行更新,让其引用当前机器的系统库 —— 在此情况下,是程序运行所在的远程机器。这些机器必须拥有相同的操作系统版本,并且您必须访问两台机器上相同版本的
Rational 工具。
- 在远程机器上:选择端口号(本实例中是 10000)并用以下命令启动 gdbserver: gdbserver rsdhostname:10000
所装备的程序名
- 在 RSD 机器上:为您的程序设置调试配置。这类似于前面部分中的 Run 配置。
- 在 Debug 窗口的 Debugger 选项卡中,从 Debugger 下拉菜单中选择 gdbserver
Debugger。
- 单击 Connection,选择类型 TCP,并为您的远程机器输入主机名,以及您在 gdbserver
命令行中输入的端口号(本实例中是 10000)。
- 单击 Debug。
图 9:设置在远程机器上运行程序
RSD 打开了 Debug Perspective,如果您的 Debug 配置设置为在 main 停止,那么就如图
10 所示。以这种方式运行 Rational Purify 特别有利。您可以在 Purify 方法 purify_stop_here
中设置断点,在任意 Purify 错误报告出现之后,您的程序会立即在调试器中停止,这样您可以在错误的时候分析程序的状态。
图 10:调试一个在远程机器上运行的程序
使用 Rational Systems Developer 来创建良构、基于 UML 2、模型驱动的 C/C++、Java(J2SE)和
CORBA 应用程序。使用 Rational PurifyPlus 来精确定位内存失败、性能问题、代码覆盖缺陷和内存泄漏。通过将
Rational PurifyPlus 集成到您基于 RSD 的开发过程中(如本文所介绍的)来更快地开发、质量更好、更健壮的代码。
尊敬的读者:现在开办了一个特别为 Rational Edge 的文章创办的
新论坛,现在您就可以分享您对本文或本期杂志或以前杂志中的其他文章的想法。阅读世界各地您的同行们所说的内容,生成您自己的讨论,或者加入正在进行的讨论。单击
此处 开始。
|