如何从外部分离 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 程序中得到不需要的 SIGABRT
s .
重新启动服务对我来说太耗时了。
如果使用此自动脚本成功调试会话,我可以在批处理脚本中使用分离命令。然而,这不是我的情况:我想 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)
我使用如下命令在后台启动 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 程序中得到不需要的 SIGABRT
s .
重新启动服务对我来说太耗时了。
如果使用此自动脚本成功调试会话,我可以在批处理脚本中使用分离命令。然而,这不是我的情况:我想 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)