公司一个linux项目,主进程启动之后,调用fork()复制了一份在后台跑。用gdb调试的时候发现跑到fork()之后,gdb会detach子进程,接着调试主进程。
如何才能调试子进程呢?查了一下文档,发现可以用命令控制gdb在fork()之后跟踪哪一个进程:
> gdb <exec>
(gdb) set follow-fork-mode child
...
(gdb) run
(gdb)
[New process 10101]
[Switching to thread 0x.....]
....
set follow-fork-mode parent是跟踪父进程(默认)
这样就能调试子进程了。
或者,使用gdb的attach命令,可以获得子进程的pid之后,直接attach上去。
用这种方法可能需要些一些调试代码,让子进程等待gdb的attach