GDB运行命令启动子进程而不是父进程

时间:2017-03-07 16:24:27

标签: gdb fork

我按照以下方式启动gdb:gdb --args parentExecutable LotsOfArgsForParent

我也跑:set follow-fork-mode child

parentExecutable 在某个时刻分叉,并使用一些参数执行 childExecutable 。我调试孩子一段时间。然后,我使用gdb的 run 命令重新启动 parentExecutable ,并使用开头给出的参数。但是, childExecutable 从头开始重新启动,没有任何参数。如何让gdb使用开头提供的参数启动父级?

1 个答案:

答案 0 :(得分:1)

在这种情况下,实际上需要注意两种模式。一种模式是follow-fork-mode,告诉gdb下叉时要做什么。但是,还有follow-exec-mode,告诉gdb如何处理exec调用。

follow-exec-mode的默认设置是same,它告诉gdb重复执行exec'd进程的当前下级。在这种情况下,一旦子进程停止,run将重新运行该子进程。

您想要的是set follow-exec-mode new。在这种模式下,gdb会对exec做出新的劣势。然后,当您想要重新运行原始可执行文件时,可以切换回第一个下级(使用info inferior获取列表,使用inferior命令选择一个)。然后run将重新运行原始文件。

另一种方法是使用set detach-on-fork off进行多次调试。但是,根据我的经验,这种模式仍然有点不稳定。但是,一旦它起作用,我认为它将是首选的方法。