Rational Edge: 使用 IBM Rational Systems Developer 和 IBM Rational PurifyPlus 更快地开发更好的软件

本文来自于 Rational Edge:本文介绍了如何在 IDE 中,使用 IBM Rational PurifyPlus for Linux and UNIX 的运行时分析工具来提高软件产品的质量和性能。本文是特别为 IBM Rational Systems Developer V 7.0 用户撰写的。

Anandi Krishnamurthy, 运行时分析项目经理, IBM

Author photoAnandi Krishnamurthy 是 IBM Rational PurifyPlus 团队中的高级软件工程师。他的兴趣领域包括 C/C++ 和 Java Runtime Analysis、Eclipse TPTP,及 CDT。



2007 年 6 月 15 日

Rational Edge 读者的新论坛
在本文的最后,您将找到一个特别为 The Rational Edge 电子杂志的作者创办的新论坛的链接。准备添加一些您对在我们的网页上找到的本文或其他主题的想法。

停站中的赛车本文是为 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> 是 purifyquantify,或 purecov

Managed Make C++ 工程

“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 所示。

PurifyPlus 属性窗口的屏幕图像

图 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) 时进行的。)

屏幕图像显示了用 Purify 进行构建的情况

图 2:定制链接命令,以利用 Purify 进行构建
点击放大

现在选择 Build Settings 选项卡,并输入扩展名,以标识您的 Purify 的可执行工件。图 3 中的实例使用了 p。单击 Apply 来保存对新建配置的变更。

屏幕图像显示了在 Purify 中创建工件扩展名

图 3:命名 Purify 的可执行工件
点击放大

不论工程什么时候构建或重新构建,您都将在 Purify 中看到控制台输出,如图 4 所示。

屏幕图像显示了 Purify 中的输出

图 4:Purify 中的控制台输出
点击放大

要运行您的 Purify 程序,就在 Project 选项卡中列出的二进制代码那里,右键单击 Purify 的二进制代码(实例中的“Shapes.p”)。选择 Run As > Run Local C/C++ Application。Purify 窗口出现了,如图 5 所示。在您运行应用程序的时候,Purify 将显示出您的测试所暴露出的内存错误。当您退出程序时,Purify 将列出所有的内存泄漏。请参考 PurifyPlus 文档,了解更多高级的使用模式。当分析完 Purify 窗口中的错误之后,退出 Purify。只要 Purify 窗口是打开的,RSD 就会认为您的应用程序还处于活动状态。这是目前的一个限制。

Purify 显示内存错误的屏幕图像

图 5:Purify 显示出测试所暴露出的内存错误
点击放大

Standard Make C 工程

当您希望使用现有的 makefile 或创建一个 makefile,并且在 IDE 不论怎样都不修改内容的情况下对它们进行管理时,“Standard Make”是您要选择的工程类型。您定义了这些 makefile 的结构,并且控制例如有多少目标,以及它们如何分布的决策,可能在多个 makefile 之间。您还为工程的构建和清除定义了最高阶层的 make 目标。

图 6 展示出,我们已经导入了由 Quantify 加载的作为示例的 testHash 程序。右键单击 C/C++ Projects 选项卡中的 testHash,并且选择 Properties 菜单。出现了 Properties for testHash 窗口。在此指定与 make 相关的信息 —— 最重要是,最高层的构建和清除的 make 目标。如图 6 所示,我们使用了默认值 allclean

屏幕图像显示了 Quantify 环境

图 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 构建的详细情况,并确保构建是成功的。

屏幕图像显示 Quantify 环境

图 7:将 Rational Quantify 作为额外的“make”目标加入
点击放大

要运行新构建的 Quantify 应用程序,在 C/C++ Projects 中,右键单击 testHash.q,并在菜单中选择 Run As > Run ...。Run 窗口打开了,在 Arguments 选项卡中输入程序参数(如果有的话)。在 Run 窗口中单击 Run。在您的应用程序运行时,最高层的 Quantify 窗口出现了。当您的程序在运行的时候,只有 Help 按钮是有效的。一旦您的应用程序完成了,Function ListCall Graph,和 Exit 按钮就有效了。让您的程序运行一个测试用例,并且让其退出。通过打开 Call Graph,来打开您的 Quantify 分析,如图 8 所示,“River of Time”显示突出了消耗最多时间的代码路径。您可以双击这里列出的方法来查看进一步的详细情况,包括时间数据所标注的源代码。请参考 PurifyPlus 文档,以获得更多的信息。

屏幕图像显示了应用程序在 Quantify 中正在运行

图 8:运行新构建的 Quantify 应用程序
点击放大

Remote invocation(远程调用)

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 错误报告出现之后,您的程序会立即在调试器中停止,这样您可以在错误的时候分析程序的状态。

屏幕图像显示 RSD 调试透视图

图 10:调试一个在远程机器上运行的程序
点击放大

结束语

使用 Rational Systems Developer 来创建良构、基于 UML 2、模型驱动的 C/C++、Java(J2SE)和 CORBA 应用程序。使用 Rational PurifyPlus 来精确定位内存失败、性能问题、代码覆盖缺陷和内存泄漏。通过将 Rational PurifyPlus 集成到您基于 RSD 的开发过程中(如本文所介绍的)来更快地开发、质量更好、更健壮的代码。

现在对本文进行讨论!

尊敬的读者:现在开办了一个特别为 Rational Edge 的文章创办的 新论坛,现在您就可以分享您对本文或本期杂志或以前杂志中的其他文章的想法。阅读世界各地您的同行们所说的内容,生成您自己的讨论,或者加入正在进行的讨论。单击 此处 开始。

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=231181
ArticleTitle=Rational Edge: 使用 IBM Rational Systems Developer 和 IBM Rational PurifyPlus 更快地开发更好的软件
publish-date=06152007