我有一个C linux应用程序(A),它在启动时会生成另一个进程(P)。当我想调试PI时,像往常一样启动A,然后将ddd / gdb连接到P。
当我想调试P的入口点(main的开始)时出现问题。如果我按照通常的方法将调试器连接到P时已经很晚了。我发现的解决方案是在P主程序的开头插入一个睡眠,因此我有时间与gdb连接,但这不是一个非常好的解决方案。
我也尝试过使用,asm("int $3")但似乎不起作用。
asm("int $3")
你有什么办法解决这个问题吗?(最好不更改A或P的代码)
您应该使用此选项:
set follow-fork-mode _模式_
当 模式 是一个parent,child或ask。
parent
child
ask
要跟随父母(这是默认设置),请使用:
set follow-fork-mode parent
跟随孩子:
set follow-fork-mode child
要让调试器每次询问您:
set follow-fork-mode ask
因此,基本上,您将开始将gdb连接到A,然后将gdb设置为跟随该子对象,然后当A生成P时,gdb将连接到P并与A分离。