在父shell终止后恢复gdb会话

34 浏览
0 Comments

在父shell终止后恢复gdb会话

我在SSH shell上运行gdb。一段时间后,由于长时间没有操作,shell断开了连接。重新连接后,我发现gdb实例仍在运行。

  1. 我如何控制正在运行的gdb实例?
  2. 我能否启动一个新的gdb实例并接管正在运行的gdb实例的会话?

注意:这不是关于保持SSH会话的活动状态。这更多是关于从另一个shell实例控制gdb。无论它是从SSH还是本地运行。

0
0 Comments

问题的原因是当父shell终止时,gdb会丢失控制终端,从而无法继续进行调试。解决方法是使用类似于tmux或screen的程序,在其中启动新的gdb进程。这样,当与服务器的连接断开后,可以轻松重新连接到tmux/screen会话。这些程序基本上实现了相同的功能,但tmux可能更强大一些。

有人问起什么决定了一个进程在SSH终止时是否终止,回答是进程会收到一个信号,可能是SIGHUP信号。这完全取决于程序如何处理该信号。

回答者进一步解释说tmux或screen不会退出,只要重新连接时重新附加即可。此外,还有一些方法可以防止SSH断开连接,假设连接本身是可靠的。作者在某个时候在ssh_config中设置了ServerAliveInterval来解决这个问题。作者更喜欢即使在没有任何活动的情况下也保持SSH会话连接的状态。

0