使用“调试”视图

借助“调试”视图,可以管理对程序的调试。对于正在调试的每个目标,它会显示已暂挂线程的堆栈。对于正在调试的每个程序或应用程序,调试目标(与线程和堆栈帧关联)都会显示在“调试”视图中。
关于此任务

“调试”视图中的典型调试目标是按下图描述的:

“调试”视图

在“调试”视图中,用来启动程序的调试会话的启动显示在顶部节点级别(图中的指针 A.)上。在启动的下方,显示一个表示调试引擎的节点(图中指针 B.)。然后,显示程序中的每个线程(图中指针 C.)。当程序执行停止时,缺省情况下,用于停止线程的节点会自动展开以显示其堆栈帧(图中指针 D.)。如果手动扩展其他线程,那么下次程序暂挂时,这些线程将自动扩展。最后,显示表示正在调试的进程和程序的节点(图中指针 E.)。

注:
  • 对于单线程应用程序(不是通过使用 libpthreads.a 构建的那些应用程序),显示在“调试”视图中的线程标识始终为内核线程标识。这通常是大数字。
  • 对于多线程应用程序(通过使用 libpthreads.a 构建的那些应用程序),显示在“调试”视图中的线程标识为 pthread 标识。这些通常是小数字。具有很大线程标识的线程指示当前与 pthread 不关联的内核线程。如果应用程序已接收到异步信号(例如 SIGSTOP),那么通常会发生此情况。当处理了该信号时,这些线程将消失。
  • 如果选择在多线程进程中对 fork() 进行调用之后跟随子进程,那么调试器将仅调试该子进程中存在的单个内核线程。此线程的标识将为内核线程的标识。

当程序执行暂挂时,所选堆栈帧的源文件会在编辑器中打开,突出显示程序要执行的源文件行。如果程序中存在多个线程,那么导致了停止的线程的堆栈可被滚动锁定到调试帧的末尾。

“调试”视图还可用于设置调试器守护程序。有关这方面的信息,请参阅与侦听调试引擎相关的主题。

运行、终止和拆离

关于此任务

可以在“调试”视图中执行下列基本调试操作:

  • 要运行应用程序,单击“重新开始”按钮(“重新开始”图标)或按 F8。
  • 要终止调试会话,单击“终止”(“终止”图标)或按 Shift+F8,或者右键单击要终止的调试目标(或者它的其中一个线程或堆栈)并选择其中一个终止操作。
  • 要从程序拆离并让它保持运行,单击“断开连接”(“断开连接”图标)。此操作或许不可用,这取决于正在调试的程序的启动方式。

暂停执行

关于此任务
如果要调试的应用程序正在运行,那么可以通过使用暂挂操作(“暂挂”图标)(Ctrl+F8) 来暂停该应用程序(或它内部的各个线程)。如果在使用此操作时选择了进程,那么该进程的所有线程都将停止。如果调试引擎支持暂挂和重新开始各个线程,并且已选择某个线程,那么仅该线程将停止。仅当您正在使用 AIX 调试引擎的版本 11 或更高版本时,才提供此支持。应用程序中的线程将暂挂,直到您发出重新开始操作。当发出暂挂操作时,调试引擎会将 SIGSTOP 发送至要调试的程序。

当具有正在运行的失控进程时暂停(但不是命中断点)很有用。可通过暂停应用程序来重新获取应用程序的控制权。当暂停程序时,它通常将在编辑器的“反汇编”视图中停止。

单步通过程序

关于此任务

当线程暂挂时,“单步执行”控件可以用来逐行单步通过程序的执行。在执行“单步执行”操作时,如果遇到断点或事件,那么执行会在该断点或事件处暂挂,并且“单步执行”操作结束。可以使用“单步执行”命令来单步通过程序,一次单条指令或单个位置。

下列“单步执行”命令可用:

  • 单步跳过“单步跳过”图标)(F6):当发出“单步跳过”时,程序会单步执行至下一源文件行。
  • 单步进入“单步进入”图标)(F5):当发出“单步进入”时,程序将单步执行至下一语句。如果当前行包含对另一函数的调用,那么调试器将在该函数中停止。

    此命令的行为受使用单步执行过滤器操作(“使用单步执行过滤器/单步执行调试”图标)(Shift+F5) 影响。如果过滤器处于关闭状态(未选择按钮),那么即使程序没有包含调试信息,调试器也将停止在调用的函数中,并且必须显示反汇编。如果过滤器处于打开状态(已选择按钮),那么当可以显示源文件时,调试器将仅停止在调用的函数中。如果无法显示源代码,那么调试器会进行工作,就好像您已发出单步跳过一样。DER_DBG_ STEP_DEBUG 调试引擎环境变量会影响使用单步执行过滤器操作的行为。有关调试引擎环境变量的信息,请参阅相关主题。

    注: 对于 PL/I 和 COBOL,“单步进入”操作将按通常进行,就好像单步执行过滤器操作始终打开一样。当调试程序以这些语言编写时,调试器将尝试停止在源代码中。
  • 单步返回“单步返回”图标)(F7):当发出“单步返回”时,程序会运行至调用程序中紧跟在当前函数的调用之后的点。通常将停在调用指令后面的位置。如果调用程序包含调试信息,那么这可以在源文件行的中间。
  • 动态单步进入:当发出此操作时,调试器会重复地发出“单步进入”操作。可以通过再次选择动态单步进入操作来控制每一单步执行之间的延迟。

为服务请求收集信息

关于此任务
如果需要向 IBM 发出服务请求,那么可能要求您通过服务请求收集的方式来收集有关已安装调试器的信息。要为服务请求收集信息,请在“调试”视图中单击为服务请求收集信息并完成“收集信息”对话框。选择用于保存所生成归档文件的位置,输入所遇到问题的简短描述并单击确定以启动收集。

反馈