当前位置: 首页 > 面试题库 >

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

凌嘉勋
2023-03-14
问题内容

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

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

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

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


问题答案:

您应该使用此选项:

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分离。



 类似资料:
  • 问题内容: 我是Visual Studio用户,习惯于调试断点。我现在在Linux环境中工作,并且正在使用Eclipse作为IDE。我是linux和eclipse的新手。我不知道如何在Eclipse中使用gdb。我尝试在命令行中使用gdb,但它并不像拥有UI那样容易。 如何在Eclipse中使用gdb? 问题答案: 以下说明适用于Eclipse 3.5(Galileo)。对于3.6(Helios)

  • 问题内容: exec命令在我的服务器上不起作用,它什么也不做,我已经关闭了safe_mode,并验证了所有控制台命令都在工作,我已经尝试了绝对路径。我已经检查了应用程序的权限,并且我需要的所有应用程序都具有执行权限。我不知道该怎么办,这是我尝试过的代码的摘要。 最后两个代码显示: 我已经联系了服务器服务,他们无法帮助我,他们不知道exec命令为什么不起作用。 问题答案: 看看,在下面: 确保exe

  • 问题内容: 在linux下,我可以使用GDB调试当前正在运行的进程吗? 问题答案: 是。使用命令。查看此链接以获取更多信息。打字在GDB控制台提供了以下: 附加到GDB外部的进程或文件。该命令附加到另一个目标,该目标与上一个“ ”命令的类型相同(“ ”将显示目标堆栈)。该命令可以将进程ID,进程名称(带有可选的进程ID作为后缀)或设备文件作为参数。对于进程ID,您必须具有向该进程发送信号的权限,并

  • 问题内容: 任何人都可以指导如何使用GDB调试器在Linux上调试JNI代码(如果可能,请提出其他选择)。 我已经安装了Gdb,但是没有得到如何使用它调试项目的信息。我是否还需要使用-g选项t debug .so文件来编译.cpp文件? 问题答案: 启动您的Java应用程序 使用top,ps,…查找pid 使用此pid启动gdb 附加程序代码 像往常一样使用gdb进行调试 这篇博客文章解释了整个过

  • 问题内容: 我知道fork()对于子进程和父进程返回的结果有所不同,但是我无法找到有关此情况的信息。子进程如何从fork接收返回值0?在调用堆栈方面有什么区别?据我了解,对于父母来说,是这样的: 父进程-调用fork-> system_call-调用fork-> fork执行-返回-> system_call-返回->父进程。 在子进程中会发生什么? 问题答案: %人叉 返回值 indi- cat

  • 问题内容: 我有一个使用两个线程的程序。我已经在两个线程中都设置了断点。在gdb下运行程序时,我想在线程之间切换并使其运行。(线程t1是活动的并且正在运行,线程t2;在断点处暂停时。我想停止T1的运行并运行T2)。 有什么办法可以安排gdb中的线程? 问题答案: 如果您使用的是GDB 7或更高版本,请尝试“不间断模式”。 http://sourceware.org/gdb/current/onli