远程 GDB checkpoint/fork 失败

Remote GDB checkpoint/fork failure

我正在尝试在不支持 运行 的远程目标上进行调试或在没有检查点的情况下重新启动。唯一可用的用户是 root,因此不应该有任何权限问题。我试过了:

 Breakpoint 1, main (argc=4, argv=0x7fffffffe348) at foo.cpp:40
 (gdb) checkpoint
 checkpoint -1: fork returned pid 6145.
 Failed to find new fork
 (gdb) i checkpoints 
 No checkpoints.

有人知道如何让 运行 工作吗?或者我如何检查真正导致分叉失败并阻止检查点的原因?

分叉后如何恢复检查点?检查点会及时倒带到进程保存的状态。一旦分叉发生,我想检查点将只存在于原始进程中。

手册中有这个条目:

Finally, there is one bit of internal program state that will be different when you return to a checkpoint — the program's process id. Each checkpoint will have a unique process id (or pid), and each will be different from the program's original pid. If your program has saved a local copy of its process id, this could potentially pose a problem.

关于需要使用检查点来重新启动远程会话。我以前从未使用过检查点,但我已经重新启动了很多远程会话。

经过一些试验,将以下内容添加到您的 .gdbinit 文件

target extended-remote <host>:<port>

这应该允许您使用 运行 命令,无需重新启动。