为了在源代码的层次上调试您的程序,您需要根据特定的汇编器选项来汇编程序,这些选项会指导生成符号化的信息,并调试对象文件中的 hook。对于 IBM XL C/C++ 汇编器 Enterprise Edition for AIX,使用优化(-O0)而是用 -g 选项来进行汇编。
[@more@]启动一个调试过程
根据调试信息来汇编程序
为了在源代码的层次上调试您的程序,您需要根据特定的汇编器选项来汇编程序,这些选项会指导生成符号化的信息,并调试对象文件中的 hook。对于 IBM XL C/C++ 汇编器 Enterprise Edition for AIX,使用优化(-O0)而是用 -g 选项来进行汇编。
UI 包含了监听调试引擎连接的 daemon。daemon 就是 UI 与 调试引擎之间的链接,并且必须在开始调试操作之前就得到配置。调试 daemon 会监听调试引擎连接的端口。为了开始调试,您需要确定 daemon 已经为接受连接做好了准备。您可以从 UI 中 Debug 视图工具栏中的 daemon 按钮来观察并更改 daemon 的状态。如果 daemon 正在监听,那么图标会显示为一个 。如果 daemon 没有进行监听,那么图标会显示为一个 。
daemon 使用的默认端口是 8001。如果您在一个多用户的机器上运行 UI,那么默认的 daemon 端口应该做好被不同调试操作使用的准备。如果您接受了一条信息,说调试操作不能开始,那么通过从 Debug Daemon 偏好页面或者从 Debug 视图中指定一个不同的端口号或者端口的范围,您可以更改 daemon 端口号。
通过分别启动 UI 与引擎,您可以对程序进行远程调试。在一个运行 Microsoft Windows 的系统上启动 UI,并使用一个在 AIX 上运行的远程调试引擎来连接到 UI 上。
执行下列的步骤来开始一个调试操作 :
- 启动客户端机器上的调试器用户界面。
在启动调试器用户界面时不要指定程序的名字。 - 确定调试 daemon 处于监听状态。
如果它尚未处于监听状态,那么您可以点击 daemon 图标来开始监听调试引擎连接。如果端口已经用于其它的引擎连接,那么您就需要更改端口号或者指定一个端口的范围了。如果您想得到更多的信息,那么您可以查看前一个界面,“创建 daemon”。 - 找到客户端机器的主机名或者 IP 地址。
所谓的客户端机器就是您运行调试器用户界面的机器。您可以选择 daemon 图标右边的向下箭头并从菜单中选择 Get Workstation IP 来找到客户端 IP 地址。您需要主机名或者客户端 IP 地址来启动调试引擎。 - 使用以下的命令行来启动调试引擎 :
$
irmtdbgc -qhost=[:port]
其中 daemon 主机是前步中您找到客户端机器的主机名或者 IP 地址。端口就是调试 daemon 所监听的端口号。
命令 irmtdbgc 支持一系列的命令行选项,并识别一系列的环境变量。例如,环境变量 DER_DBG_ADDR 包含了 -qhost 选项的默认值。您可以在命令行中输入 irmtdbgc -help 来得到怎样使用 irmtdbgc 的帮助。
一旦 UI 与调试引擎之间的连接建立了,那么您就可以开始调试您的源代码了。接下来的屏幕截图显示了调试操作的 UI,其中用户正在调试一个名为 sort 的程序:
图 1. 引擎与 UI 之间成功的连接
调试器显示了大量的信息,并且可以分组到不同的称为视图的部分中。下面的部分将会讨论与各种调试相关任务最重要的核心。
您最喜欢使用到的视图是 Debug 视图,它是您的调试操作的主控制中心。除了 Debug 视图,UI 包含了一些其他的视图,以显示特定的信息,包含 Monitors、Breakpoints、Memory 与 Modules、Variables 及 Registers 视图。每一个视图中工具栏内的图标提供了附加的有用操作,而且您可以将鼠标置于其上,以显示一些描述操作的信息出来。如果您想了解更多的信息,那么您可以挨个地使用它们。
调试视图是任何调试过程的起始点。管理的调试视图会逐次添加每一个新的 UI 引擎连接。对于每一个调试下的过程,调试视图会显示所有它所运行的线程。反过来,对于每一个暂停的线程,可以看到一系列的栈框架,代表了访问的层级结构。除了调试视图,UI 还包含了一些其他的视图,来显示一些特定的信息,包含 Variables、Breakpoints、Registers、Monitors、Memory 与 Modules 视图。同样,当前开始调试的源文件会在 Source 编辑器中显示出来。几乎所有其他的视图都会取决于“活动的”调试过程。通过选择一个调试目标,或者调试视图中的任意其构件(例如,线程、栈框架),可以激活一个调试操作。当一个调试过程出于激活状态下,那么 UI 中剩余视图中的内容将会得到更新。
中断点视图是控制中断点的中心位置。您总是可以看到您在 Breakpoints 视图中设置的一系列中断点,并且可以右击视图并从 Add Breakpoint 子菜单中选择其中的一个来添加一个新中断点。通过禁止可以暂时性地将中断点置于非激活状态。在中断点视图中,激活中断点在旁边有一个可选的勾号,通过选中或者不选中可以激活或者禁止中断点的运行。
图 2. 调试视图工具栏中可以找到的用于执行程序的控件
从第一个黄色的箭头开始,它们分别是:Step Into,Step Over 与 Step Return。
您还可以从运行菜单中得到这些命令,或者使用键盘快捷方式:F5、 F6 与 F7。如果您将程序指向 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/