远程GDB检查点/分叉失败

时间:2017-01-27 16:23:13

标签: c++ gdb gdbserver

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

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

2 个答案:

答案 0 :(得分:1)

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

target extended-remote <host>:<port>

这应该允许您使用run命令,无需使用restart。

答案 1 :(得分:0)

一旦你解决了怎样才能恢复检查点?检查点会在某个时刻回退到进程保存状态。一旦fork出现,我想象检查点只存在于原始进程中。

从手册中可以看到这个条目:

  

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

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