默认情况下,父进程fork一个子进程,gdb只会继续调试父进程而不会关心子进程的运行。如果需要在多个子进程和父进程间来回跳跃调试,则需要设置相关参数detach-on-fork。
1 跟踪子进程进行调试,可以使用set follow-fork-mode mode来设置fork跟随模式。
1.1 show follow-fork-mode
进入gdb以后,我们可以使用show follow-fork-mode来查看目前的跟踪模式。
1.2 set follow-fork-mode parent
gdb只跟踪父进程,不跟踪子进程,这是默认的模式。
1.3 set follow-fork-mode child
gdb在子进程产生以后只跟踪子进程,放弃对父进程的跟踪。
2. 想同时调试父进程和子进程,以上的方法就不能满足了。gdb提供了set detach-on-fork mode命令来同时调试多个进程
2.1 show detach-on-fork
show detach-on-fork显示了目前是的detach-on-fork模式
2.2 set detach-on-fork on
只调试父进程或子进程的其中一个(根据follow-fork-mode来决定),这是默认的模式。
2.3 set detach-on-fork off
父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。
3. 如何在多进程间切换
使用gdb调试多进程时,如果想要在进程间进行切换,那么就需要在fork调用前设置: set detach-on-fork off ,
然后使用 info inferiors 来查看进程列表信息,得到的信息可以看到最前面有一个进程编号,使用inferior num 来进行进程切换。
> info inferiors
> inferiors <process number>
» 转载保留版权:猿码设计师 » 《Linux gdb子进程和多进程调试》
» 本文链接地址:Linux gdb子进程和多进程调试 - 猿码设计师 follow-fork-mode
» 如果喜欢可以:关注《猿码设计师》公众号