一尘不染

如何在GDB中调试fork-exec进程的入口点?

linux

我有一个C linux应用程序(A),它在启动时会生成另一个进程(P)。当我想调试PI时,像往常一样启动A,然后将ddd / gdb连接到P。

当我想调试P的入口点(main的开始)时出现问题。如果我按照通常的方法将调试器连接到P时已经很晚了。我发现的解决方案是在P主程序的开头插入一个睡眠,因此我有时间与gdb连接,但这不是一个非常好的解决方案。

我也尝试过使用,asm("int $3")但似乎不起作用。

你有什么办法解决这个问题吗?(最好不更改A或P的代码)


阅读 322

收藏
2020-06-03

共1个答案

一尘不染

您应该使用此选项:

set follow-fork-mode _模式_

模式 是一个parentchildask

要跟随父母(这是默认设置),请使用:

set follow-fork-mode parent

跟随孩子:

set follow-fork-mode child

要让调试器每次询问您:

set follow-fork-mode ask

因此,基本上,您将开始将gdb连接到A,然后将gdb设置为跟随该子对象,然后当A生成P时,gdb将连接到P并与A分离。

2020-06-03