远程 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>
这应该允许您使用 运行 命令,无需重新启动。
我正在尝试在不支持 运行 的远程目标上进行调试或在没有检查点的情况下重新启动。唯一可用的用户是 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>
这应该允许您使用 运行 命令,无需重新启动。