可能需要调试已经运行的程序。在以下情况中,需要连接到正在运行的进程:
要调试正在运行的服务器,但又不想停止或中止服务器。
要调试正在运行的具有图形用户界面的程序,但又不想重新启动该程序。
程序处于无限循环,要调试该程序但又不想将其中止。
通过将程序的进程 ID 编号用作 dbx debug 命令的一个参数,可以将 dbx 连接到正在运行的程序。
程序调试完毕后,便可以使用 detach 命令来解除 dbx 对程序的控制,而无需终止进程。
如果在将 dbx 连接到正在运行的进程后退出,dbx 会在终止前隐式分离。
要将 dbx 连接到独立于 dbx 运行的程序,可以使用 attach 命令或 debug 命令:
(dbx) debug program-name process-ID
或
(dbx) attach process-ID
可以用一个 –(短划线)替换程序名称。dbx 将自动查找与进程 ID 相关联的程序并将其装入。
有关更多信息,请参见debug 命令 和attach 命令。
% dbx program-name process-id
dbx 连接到程序后,程序便停止执行。将其他程序装入 dbx 时,可以检查该程序。可以使用任何事件管理或进程控制命令来调试该程序。
在调试现有进程的过程中将 dbx 连接到新进程时,会出现下列情况:
如果使用 run 命令启动当前正在调试的进程,那么 dbx 会在连接新进程之前终止此进程。
如果使用 attach 命令或通过在命令行中指定进程 ID 来开始调试当前进程,则 dbx 会在连接到新进程之前从当前进程中分离。
如果要将 dbx 连接到的进程由于 SIGSTOP 信号、SIGTSTOP 信号、SIGTTIN 信号或 SIGTTOUT 信号而停止,则连接会成功,并显示类似以下的消息:
dbx76: warning: Process is stopped due to signal SIGSTOP
该进程是可检查的,但是要恢复它,您需要使用 cont 命令向其发送 SIGCONT 信号:
(dbx) cont -sig cont
可以对具有某些异常的连接的进程使用运行时检查。请参见对连接的进程使用运行时检查。