我按照以下方式启动gdb:gdb --args parentExecutable LotsOfArgsForParent
我也跑:set follow-fork-mode child
parentExecutable 在某个时刻分叉,并使用一些参数执行 childExecutable 。我调试孩子一段时间。然后,我使用gdb的 run 命令重新启动 parentExecutable ,并使用开头给出的参数。但是, childExecutable 从头开始重新启动,没有任何参数。如何让gdb使用开头提供的参数启动父级?
答案 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
进行多次调试。但是,根据我的经验,这种模式仍然有点不稳定。但是,一旦它起作用,我认为它将是首选的方法。