远程 GDB 检查点/分叉故障

Remote GDB checkpoint/fork failure

本文关键字:分叉 故障 检查点 GDB 远程      更新时间:2023-10-16

我正在尝试在不支持在没有检查点的情况下运行或重新启动的远程目标上进行调试。唯一可用的用户是 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.

有谁知道如何跑去上班?或者我如何检查以查看实际导致分叉失败并阻止检查点的原因?

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

target extended-remote <host>:<port>

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

一旦你分叉了,你怎么能恢复一个检查点? 检查点在某个时刻回退到进程保存的状态。 一旦分叉发生,我想检查点只会存在于原始进程中。

从手册中有以下条目:

最后,有一点内部程序状态将是 返回到检查点(程序的进程 ID)时不同。 每个检查点都有一个唯一的进程 ID(或 pid),每个检查点都将 与程序的原始 PID 不同。如果您的程序有 保存了其进程 ID 的本地副本,这可能会造成 问题。

关于在远程会话上执行重新启动所需的检查点。 我以前从未使用过检查点,但是我已经重新启动了许多远程会话。