ZT - 使用 IBM Debugger for AIX 来提高开发效率(2)

启动一个调试过程

根据调试信息来汇编程序

为了在源代码的层次上调试您的程序,您需要根据特定的汇编器选项来汇编程序,这些选项会指导生成符号化的信息,并调试对象文件中的 hook。对于 IBM XL C/C++ 汇编器 Enterprise Edition for AIX,使用优化(-O0)而是用 -g 选项来进行汇编。

[@more@]

启动一个调试过程

根据调试信息来汇编程序

为了在源代码的层次上调试您的程序,您需要根据特定的汇编器选项来汇编程序,这些选项会指导生成符号化的信息,并调试对象文件中的 hook。对于 IBM XL C/C++ 汇编器 Enterprise Edition for AIX,使用优化(-O0)而是用 -g 选项来进行汇编。

创建 daemon

UI 包含了监听调试引擎连接的 daemon。daemon 就是 UI 与 调试引擎之间的链接,并且必须在开始调试操作之前就得到配置。调试 daemon 会监听调试引擎连接的端口。为了开始调试,您需要确定 daemon 已经为接受连接做好了准备。您可以从 UI 中 Debug 视图工具栏中的 daemon 按钮来观察并更改 daemon 的状态。如果 daemon 正在监听,那么图标会显示为一个 如果 daemon 正在监听时的图标。如果 daemon 没有进行监听,那么图标会显示为一个 如果 daemon 没有监听时的图标

daemon 使用的默认端口是 8001。如果您在一个多用户的机器上运行 UI,那么默认的 daemon 端口应该做好被不同调试操作使用的准备。如果您接受了一条信息,说调试操作不能开始,那么通过从 Debug Daemon 偏好页面或者从 Debug 视图中指定一个不同的端口号或者端口的范围,您可以更改 daemon 端口号。

远程调试

通过分别启动 UI 与引擎,您可以对程序进行远程调试。在一个运行 Microsoft Windows 的系统上启动 UI,并使用一个在 AIX 上运行的远程调试引擎来连接到 UI 上。

执行下列的步骤来开始一个调试操作 :

  1. 启动客户端机器上的调试器用户界面。
    在启动调试器用户界面时不要指定程序的名字。
  2. 确定调试 daemon 处于监听状态。
    如果它尚未处于监听状态,那么您可以点击 daemon 图标来开始监听调试引擎连接。如果端口已经用于其它的引擎连接,那么您就需要更改端口号或者指定一个端口的范围了。如果您想得到更多的信息,那么您可以查看前一个界面,“创建 daemon”。
  3. 找到客户端机器的主机名或者 IP 地址。
    所谓的客户端机器就是您运行调试器用户界面的机器。您可以选择 daemon 图标右边的向下箭头并从菜单中选择 Get Workstation IP 来找到客户端 IP 地址。您需要主机名或者客户端 IP 地址来启动调试引擎。
  4. 使用以下的命令行来启动调试引擎 :$ irmtdbgc -qhost=[:port] 其中 daemon 主机是前步中您找到客户端机器的主机名或者 IP 地址。端口就是调试 daemon 所监听的端口号。

命令 irmtdbgc 支持一系列的命令行选项,并识别一系列的环境变量。例如,环境变量 DER_DBG_ADDR 包含了 -qhost 选项的默认值。您可以在命令行中输入 irmtdbgc -help 来得到怎样使用 irmtdbgc 的帮助。

使用 IBM Debugger

一旦 UI 与调试引擎之间的连接建立了,那么您就可以开始调试您的源代码了。接下来的屏幕截图显示了调试操作的 UI,其中用户正在调试一个名为 sort 的程序:


图 1. 引擎与 UI 之间成功的连接
显示程序源代码调试过程的图

调试器显示了大量的信息,并且可以分组到不同的称为视图的部分中。下面的部分将会讨论与各种调试相关任务最重要的核心。

您最喜欢使用到的视图是 Debug 视图,它是您的调试操作的主控制中心。除了 Debug 视图,UI 包含了一些其他的视图,以显示特定的信息,包含 Monitors、Breakpoints、Memory 与 Modules、Variables 及 Registers 视图。每一个视图中工具栏内的图标提供了附加的有用操作,而且您可以将鼠标置于其上,以显示一些描述操作的信息出来。如果您想了解更多的信息,那么您可以挨个地使用它们。

Debug 视图

调试视图是任何调试过程的起始点。管理的调试视图会逐次添加每一个新的 UI 引擎连接。对于每一个调试下的过程,调试视图会显示所有它所运行的线程。反过来,对于每一个暂停的线程,可以看到一系列的栈框架,代表了访问的层级结构。除了调试视图,UI 还包含了一些其他的视图,来显示一些特定的信息,包含 Variables、Breakpoints、Registers、Monitors、Memory 与 Modules 视图。同样,当前开始调试的源文件会在 Source 编辑器中显示出来。几乎所有其他的视图都会取决于“活动的”调试过程。通过选择一个调试目标,或者调试视图中的任意其构件(例如,线程、栈框架),可以激活一个调试操作。当一个调试过程出于激活状态下,那么 UI 中剩余视图中的内容将会得到更新。

设置中断点

中断点视图是控制中断点的中心位置。您总是可以看到您在 Breakpoints 视图中设置的一系列中断点,并且可以右击视图并从 Add Breakpoint 子菜单中选择其中的一个来添加一个新中断点。通过禁止可以暂时性地将中断点置于非激活状态。在中断点视图中,激活中断点在旁边有一个可选的勾号,通过选中或者不选中可以激活或者禁止中断点的运行。

程序执行的步骤


图 2. 调试视图工具栏中可以找到的用于执行程序的控件
显示调试视图工具栏的屏幕截图

从第一个黄色的箭头开始,它们分别是:Step IntoStep OverStep Return

您还可以从运行菜单中得到这些命令,或者使用键盘快捷方式:F5F6F7。如果您将程序指向 Run (F8), 执行会一直继续下去,直到达到了某一个中断点为止,或者程序终止为止。

检查变量

每一次线程或者程序结束的时候,变量视图都会列出范围内的变量。

同样,在每一个程序暂停的时候,对界内变量所做的更改可以在变量视图中强调显示。在变量视图中有一些可用的操作。为了弄清楚可以执行什么操作,您可以在界面视图的任意一个地方右击,来打开内容菜单。变量值也可以在视图中得到更改,而且如果您从变量视图中更改了一个变量的话,那么分配的新值就会变得立即变得十分有效率了。您还可以更改变量的代表;例如,以二进制格式而不是默认的十进制形式来显示一个整数,使用某个选中变量的 Change representation 背景菜单可以完成此项操作。

源查找

一般条件下,您可以查看对调试来说十分关键的程序源代码。调试引擎会基于程序中的调试信息,来试着找到,或者“搜索”程序。这意味着调试引擎,基于存储在使用 -g 选项汇编程序中的文件路径信息,将会试着找到服务器上的源代码。如果调试引擎不能使用调试信息来找到程序的源代码,那么您可以编辑查找路径。这是一系列位置的列表,调试引擎可以从中进行搜索以找到丢失的源代码。通过编辑源代码的查找路径,您可以将调试器指向更多位置处丢失的源代码处。通过从调试视图中程序的背景菜单中选择 Edit Source Lookup... 条目,您可以实现这一点。


图 3. 访问源代码查找路径编辑器
显示编辑源代码查找操作的图

除了显示源文件,还有其他的两个选项可以查看调试器源文件;您可以选择以分别显示程序,或者分布显示,或者您可以使用混合视图以显示源文件,并同时显示程序。调试器帮助文件包含了怎样为您的程序选择最佳操作的指南。注意分别操作或者混合视图都是根据集合指南来完成的,尽管源文件的处理是通过声明来实现的 。

重启

有时您可能发现您的程序运行了一个您很感兴趣的点,而您需要重启您的调试操作。幸运的是,这一步可以完成,甚至不用去暂停 UI 的友好完善操作。在您感兴趣的点上简单地设置一个中断点,您只须点击 Restart program 按钮,并运行程序,直到达到中断点为止。


图 4. 重启一个激活的调试操作
显示重启程序按钮的图

寻求帮助

调试器 UI 构建于 Eclipse 开源语言上,并且可以从其高级帮助系统中获益。例如,将您的鼠标停留在一个工具栏按钮上,将会显示出关于该工具的提示信息,而且您点击 F1 按钮将会产生视图的背景相关性帮助文件。

从背景菜单中选择 Key assist... 条目是查看所有可用快捷方式的一种方法。


图 5. 激活的键盘快捷方式
显示工具栏提示信息窗口的图,描述了快捷方式

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16896827/viewspace-1036467/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16896827/viewspace-1036467/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值