如何从外部分离 gdb 会话?

How can I detach a gdb session from outside?

我使用如下命令在后台启动 gdb 会话:

gdb --batch --command=/tmp/my_automated_breakpoints.gdb -p pid_of_proces> &> /tmp/gdb-results.log &

末尾的 & 让它在后台 运行 (并且 shell 之后立即关闭,因为此命令是由单个 ssh 命令发出的).

我可以用 ps -aux | grep gdb 找到 gdb 会话的 pid

但是:我如何从 运行ning 进程中优雅地分离这个 gdb 会话,就像我在我面前使用 (gdb) detach 进行终端会话一样命令?

当我用 kill -9 gdb_pid 终止 gdb 会话(而不是 运行ning 进程本身)时,我在 运行ning 程序中得到不需要的 SIGABRTs .

重新启动服务对我来说太耗时了。

如果使用此自动脚本成功调试会话,我可以在批处理脚本中使用分离命令。然而,这不是我的情况:我想 detach/quit 运行 在会话期间出现一些错误时 ning gdb 会话,所以我想从另一个终端会话中手动分离 gdb。

如果您在后台从终端#1 运行 gdb 命令,您总是可以通过 运行 命令 [=] 将 gdb 带回前台13=]。然后,您可以像往常一样简单地按 CTRL+C 和 detach 来优雅地停止调试会话。

假设终端 #1 现在被其他东西占用而你不能使用它,你可以向 gdb 进程发送一个 SIGHUP 信号来分离它:

sudo kill -s SIGHUP $(pidof gdb)

(如果您有多个 gdb 实例,请将 $(pidof gdb) 替换为实际的 PID)