用于Power Systems Software™的IBM®Rational®Developer提供了针对IBM®AIX®,IBM®PowerLinux™或IBM i的集成开发和调试工具。 它通过具有丰富的源代码编辑功能,可视化设计和分析工具,集成的搜索和编译错误反馈以及基于Eclipse的远程调试功能,帮助开发人员在IBM Power Systems™上创建和维护应用程序。
集成调试器是一个交互式的源代码级图形调试器。 它可以在Microsoft Windows和基于Linux的工作站上工作,这些工作站远程连接到在AIX或PowerLinux上运行的调试器引擎。
集成的调试器使您可以调试用C,C ++和COBOL编写的程序。 使用集成的调试器,可以在加深对自己的程序的了解时更快地诊断问题。
在本文中,我们在AIX上使用C / C ++来描述集成调试器的功能。
开始调试会话
本节介绍如何准备要调试的程序以及如何使用远程系统资源管理器启动调试会话。 我们还介绍了基本的调试功能,例如设置断点,单步执行程序,显示变量和监视表达式。
用调试信息编译程序
要在源代码级别调试程序,您需要使用某些编译器选项来编译程序,这些选项会指示编译器在目标文件中生成调试信息。 对于AIX的IBM XL C / C ++编译器企业版,请使用-g选项进行编译。
设置远程系统资源管理器
要在AIX或Power Linux上调试远程应用程序,请首先建立远程系统连接。 您可以通过“远程系统资源管理器”透视图执行此操作。 作为示例,我们将描述如何建立与AIX主机的远程连接。
- 在Remote Systems导航器中,双击New Connection> AIX ,以打开New Connection对话框窗口。
- 输入AIX主机名。 您也可以在下一页上修改连接配置。
- 单击确定按钮后,将在导航器中创建一个新节点。
图1.创建到远程AIX系统的连接

您可以展开“ 文件”>“我的主目录”树来浏览主目录下的文件,或者展开“ 文件”> “根目录树”以从根目录浏览。 进行远程连接时,它可能会提示您输入用户ID和密码。 输入密码时,可以选中“ 保存密码”复选框,这样就不必再次输入密码。
启动调试会话
从“远程系统资源管理器”中创建远程连接之后,可以开始从“远程系统”导航器中调试远程应用程序。
- 展开远程文件系统树,以显示使用调试信息编译的远程可执行文件。
- 右键单击远程文件,然后选择“ 调试”>“远程应用程序”。
这将在远程可执行文件上启动调试会话。 如果要配置启动参数,则可以选择“ 调试”>“远程应用程序...”操作以打开启动配置对话框窗口。 您可以在该视图中修改以下调试启动参数:
- 如果在自动主要方法选项的第一个可执行行停止被选择,则调试器将自动停止在主方法的第一行。
- 您可以从“参数”选项卡输入程序参数
- 您可以从“高级”选项卡启用生产调试功能。
您也可以使用调试器附加到正在运行的进程。 为此,请从“远程系统”导航器中展开“ 进程”>“我的进程”树,右键单击要附加的进程,然后选择“ 附加”>“进程” 。
使用IBM调试器
启动调试会话后,通常可以从“调试”角度调试它。 以下屏幕截图从“调试”透视图中显示了调试会话的UI。
图2. Debug透视图
调试器显示很多信息,并且将其分为称为view的不同部分。 以下各节描述了与各种调试相关任务最相关的部分。
您可能最常使用的视图是“ 调试”视图,它是调试会话的主要控制中心。 除了“调试”视图外,UI还包含其他几个用于显示特殊信息的视图,包括“断点”,“变量”和“监视器”视图,对于高级调试,还包括“模块”,“内存”和“寄存器”视图。 每个视图工具栏中的图标都提供了其他有用的操作,您可以将鼠标光标悬停在每个视图上以显示描述该操作的工具提示。 要了解更多信息,请尝试每个。
调试视图
调试视图是任何调试会话的起点。 对于“调试”下的每个进程,该视图都会显示所有正在运行的线程。 反过来,对于每个暂停的线程,堆栈帧的列表是可见的,表示调用层次结构。 另外,当前正在调试的源文件将显示在源代码编辑器中。 选择调试会话时,将其视为活动的调试上下文。 其他调试视图显示基于当前活动调试上下文的内容。 选择调试会话将自动更新其他调试视图以显示匹配的内容。
设置断点
断点视图是控制断点的中心位置。 您始终可以在“断点”视图中看到已设置的断点列表,并且可以通过右键单击视图并从“ 添加断点”子菜单中选择一项来添加新的断点 。 您还可以从编辑器的注释列中设置源行断点。 在“断点”视图中,已启用的断点旁边带有复选标记。 您可以通过选中或清除该框来启用和禁用断点。
逐步执行程序
您可以使用“ 跳入” ,“ 跳越”和“ 返回单步”工具栏按钮来逐步执行程序。 这些命令也可以从“运行”菜单中使用,也可以通过使用键盘快捷键: F5 , F6和F7来获得。 如果您指示程序运行( F8 ),将继续执行直到遇到断点,程序终止或发生异常。
您可以使用Animated Step Into动作来重复执行程序。 可以在动画步骤图标上或从“首选项”页面直接设置动画速度。 默认速度为2秒。
检查变量
每当线程或程序停止时,“变量”视图都会列出作用域内的变量。
每次程序停止后,对范围内变量的更改将在“变量”视图中突出显示。 有几种可用的操作,您可以通过右键单击该视图内的任何位置以显示上下文菜单来查看它们。
您可以在此处更改变量值。 如果从“变量”视图编辑变量,则新值将立即生效。 您还可以更改变量的表示形式。 例如,要显示二进制格式的整数而不是默认的十进制数,请使用所选变量的“ 更改表示形式”上下文菜单。
监控器
您可以使用“监视器”视图来监视感兴趣的变量和表达式的集合,以便于访问和修改。 每次程序停止时,更新监视的变量或表达式的值。 如果变量超出范围,则它的值直到返回范围才显示。 这对于观察全局变量特别有用,因为它们会在整个调试会话中发生变化。 您可以监视任何有效的表达式,例如简单的局部变量,以监视数组中的特定索引。
您可以使用下面的方法来监测一种新的表达之一 :
- 在“监视器”视图中右键单击,然后选择“ 监视器表达式”。 在打开的对话框窗口中输入要监视的表达式。
- 从源代码编辑器中选择一个表达式,然后从上下文菜单中选择“ 监视表达式”操作。
- 在“变量”视图中右键单击一个变量,然后选择“ 监视局部变量” 。
使用高级调试技术
断点条件
有时甚至从不同的线程调用了一段代码,但只有在满足特定条件的情况下,您才想停止该代码。 这是断点向导的“ 可选参数”页面非常有用的地方。
- 在“断点”视图中右键单击一个断点,然后选择“ 编辑”以调用“编辑断点”向导。
- 然后单击“ 下一步”按钮转到“可选参数”页面,您可以在其中指定如何处理这些情况。
您可以选择要停止的线程,挂起的频率,甚至可以定义一个布尔表达式,在挂起之前必须为真。 您可能在同一位置也有多个条件断点,并且可以从“断点”视图中轻松启用和禁用它们。
图3.断点条件页面

模块视图
“模块”视图显示已调试程序的所有已加载模块。 默认情况下,仅显示具有调试信息的模块。 您可以清除“ 显示带有调试信息的模块”工具栏按钮以也显示没有调试信息的模块。
您可以展开每个模块以显示其包含的编译单元,源文件和功能。 您可以双击源文件或函数以在源代码编辑器中将其打开。 您还可以从上下文菜单中的功能上设置入口断点。
图4.模块视图

记忆体检视
使用“内存”视图,您可以检查和修改特定地址(通常是变量的地址)处的内存内容。 您还可以选择以哪种格式显示内存,例如十六进制,ASCII,EBCDIC,有符号整数或无符号整数。 用作基本内存的表达式的地址称为内存监视器 ,您可以使用“内存”视图中的“监视器”窗格来添加和删除内存监视器。
注意:
内存监视器与上一节中描述的“监视器”视图中使用的监视器不同。
图5.内存视图

显示寄存器
您可以使用“寄存器”视图显示和修改各种寄存器的内容。 寄存器在视图中按逻辑分组。 “寄存器”视图类似于“变量”视图,因为它通过突出显示已更改的项目来指示寄存器更改。 您可以将寄存器添加到“监视器”视图,并监视它们的更改。 此外,如果寄存器的值为内存地址,则可以使用“内存”视图对其进行监视。
图6. Registers视图

调试控制台
您可以使用调试控制台将调试命令发送到调试引擎。 您可以直接向调试引擎发出命令,并在调试控制台中查看结果输出,这有助于启用相当交互式的调试。 支持的命令取决于调试引擎,您可以通过在调试控制台中键入help
来显示它们。
在图7中,命令列表窗格在右侧。 它列出了所有已输入的命令。 左侧的命令历史记录窗格显示输入命令的输出。 您可以使用工具栏按钮清除命令历史记录和列表窗格,导入,导出和运行命令列表。
图7.调试控制台

调试客户端/服务器应用程序
您可以使用Rational Developer for Power Systems软件调试器来调试客户机/服务器应用程序。 例如,如果应用程序的客户端是用Java编写并在Windows或Linux上运行的,而应用程序的服务器端是用C / C ++编写并在AIX系统上运行的,则可以使用Java调试器来调试Java前端,并使用编译后的语言调试器调试C / C ++后端。 您可以逐步执行这两个程序,以了解它们如何相互影响。
源可视化
调试器提供了三种不同的源可视化选项:
- 源代码视图,其中显示了默认应用程序的源代码
- 反汇编视图,其中显示指令代码
- 混合视图,包括源代码和指令代码
您可以通过右键单击编辑器视图并选择Switch View来选择视图 。
图8.不同的源可视化视图

调试核心转储
IBM Power的集成调试器提供事后调试功能,该功能使用户可以调试由正在运行的可执行文件生成的核心文件。 可执行文件在遇到分段错误时可能会生成核心转储,这可能是由空指针引用引起的。
要调试核心转储,只需从Remote Systems导航器中选择核心文件,右键单击,然后选择Debug Post-Mortem> Core File 。 从核心转储启动的调试会话将自动在发生核心转储的堆栈帧处停止。 您可以从“变量”视图检查变量,以找出触发核心转储的原因。
生产调试
Power的集成调试器提供了生产调试功能,可以使用另一个二进制文件中的调试信息来调试生产二进制文件。 在这种情况下,您将使用-g编译标志创建带有调试信息的二进制文件,然后通过从可调试二进制文件中删除调试信息来创建生产二进制文件。 生产二进制文件是您发送给客户的二进制文件。
在某些情况下,您将需要诊断客户机器上的问题。 发生这种情况时,您可以将可调试的二进制文件复制到客户的计算机上。 使用生产调试功能,可以在生产二进制文件上启动调试会话,但可以使用可调试二进制文件中的调试信息:
- 在启动配置对话框窗口的“高级”选项卡中,选择“ 启用生产调试” 。
- 将包含相应的可调试二进制文件的目录添加到可调试二进制文件路径列表。 在生产调试方案中,生产二进制文件仍然是在计算机上运行的二进制文件,但是调试信息是从可调试二进制文件中检索的。
也可以通过将可调试的二进制文件与已加载的模块相关联来启用生产调试。 生产调试的一个用例是,客户在使用生产二进制文件时遇到了核心转储,并要求开发人员向您寻求帮助。 您可以按照调试核心转储中的过程来调试核心转储 。 但是,由于核心转储是由不包含任何调试信息的生产二进制文件生成的,因此开发人员无法在源代码级别对其进行调试。 开发人员可以清除“ 显示带有调试信息的模块”切换工具栏按钮,以显示主要的可执行模块。 然后,您可以从上下文菜单中将可调试二进制文件与主模块关联,并在源代码级别诊断问题。
团队调试
Team Debug是一项功能,它允许在IBM®Rational Team Concert™团队成员之间转移调试会话。 在团队环境中,不同的团队成员是应用程序的不同组件的专家或所有者,在团队环境中传输调试会话非常有用。 共享调试会话通过允许传输现有的调试会话来实现更快的问题解决,而接收者不必建立正确的环境并重新启动调试会话。
在调试会话期间,团队成员可以将调试会话及其当前状态转移给另一个团队成员。 传输包括当前线程状态,断点和监视器。 接收团队成员可以在接受有人已传送调试会话的通知后继续调试应用程序。 团队成员还可以将调试会话驻留在Rational Team Concert服务器上,在那里调试会话将保持其当前状态,直到有人从团队存储库中检索到该调试会话以继续对其进行调试为止。
代码覆盖率
Rational Developer for Power Systems提供了跨平台,跨语言的代码覆盖功能。 您可以通过生成统计信息来显示测试用例运行的代码行的百分比,从而使用它来查看测试用例在使用编译语言应用程序方面的表现如何。 代码覆盖功能是使用调试技术实现的。
使用代码覆盖工具,可以按照与启动常规调试会话类似的步骤来启动代码覆盖会话。 您可以从“代码覆盖率报告”视图中以树结构查看所有已编译元素的覆盖率统计信息。 使用“编译的代码覆盖率启动历史记录”视图来管理所有以前的启动。
图9.代码覆盖率报告视图

摘要
Rational Developer for Power Systems软件中的集成调试器提供了丰富的调试功能,并支持不同的编译语言和不同的平台。 除了基本的调试功能(例如,步进和设置行断点)之外,该工具还提供了许多高级功能,包括内存视图,多种断点类型,核心转储调试,生产调试,团队调试和代码覆盖率。 看到文档链接相关主题对于每个主题进行了深入的解释。