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

问题描述:

我启动gdb如下:gdb --args parentExecutable LotsOfArgsForParentGDB运行命令启动子进程,而不是父

我也跑:set follow-fork-mode child

parentExecutable在某些时候叉,并与一些参数执行childExecutable 。我调试了一会儿。然后,我使用gdb的运行命令重新启动parentExecutable,并使用在开头给出的参数。然而,相反,孩子可执行文件重新启动 - 从头开始​​,没有任何参数。我怎样才能让gdb用开头提供的参数来启动父进程?

+0

我猜测了一下,但我期望它是因为它是活跃的过程。尝试命令“info inferiors”列出正在调试的进程,然后输入“inferior n”以使父进程成为活动/选定进程。然后我希望跑步重新开始,但我敢打赌它不会杀死孩子。 – joeking

实际上有两个模式要注意在这种情况下。一种模式是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进行多次调试。不过,以我的经验来看,这种模式还是有点片面的。但是,一旦它起作用,我认为这将是首选方法。