1. set follow-fork-mode [parent|child]
gdb 默认设置是 parent,可用使用show follow-fork-mode
来查询当前fork模式。
如果想要调试子进程,进入gdb后设置
set follow-fork-mode child
然后再设置子进程里的断点,就可以调试停到子进程。
使用follow-fork-mode,只能调试一个进程,不能同时调试父子进程
2. set detach-on-fork [on|off]
on
: 只调试父进程或子进程的其中一个(根据follow-fork-mode来决定),这是默认的模式。
off
: 父、子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。
如果设置了set detach-on-fork off
且follow-fork-mode为parent
,fork后子进程并不运行,而是处于暂停状态。
follow-fork-mod 意义:代表当前gdb跟随着哪个进程在调试
注意:follow-fork-mod默认情况下跟随着主进程调试(parent)
查看当前gdb跟随着哪个进程在调试: show follow-fork-mode
设置gdb跟随哪个进程调试
set follow-fork-mode parent //设置gdb跟随主进程调试(默认)
set follow-fork-mode child //设置gdb跟随着子进程调试
detach-on-fork 意义:当前gdb调试多进程的规则查看gdb调试多进程时的规则: 如果结果显示on:代表调试一个进程,其他进程自动运行如果结果显示off:代表调试一个进程,其他进程阻塞(处于等待状态) show detach-on-fork 设置detach-on-fork: set detach-on-fork off
set detach-on-fork on //默认的
follow-fork-mod与detach-on-fork的组合 只调试主进程,子进程自动运行 set follow-fork-mod parent set detach-on-fork on 只调试子线程,主线程自动运行 set follow-fork-mod child set detach-on-fork on 同时调试两个进程,gdb跟随着父进程,子进程处于等待状态,在fork处 set follow-fork-mod parent set detach-on-fork off 同时调试两个进程,gdb跟随着子进程,父进程处于等待状态,在fork处 set follow-fork-mod child set detach-on-fork off
gdb调试口诀技巧 如果只想要调试父进程:在就父进程的代码处打上断点,然后follow-fork-mode 设为parent如果只想要调试子进程:在就子进程的代码处打上断点,然后follow-fork-mode 设为childdetach-on-fork根据自己的需求而定
其他命令 查看当前程序中正在调试的进程: GDB会为这些进程分配inferiorID号,但是这个ID号不是进程的PID显示的信息中,每一个进程占用一行,如果有个ID前面带有“*”号,代表这个进程是gdb正在调试的进程 info inferiors 切换gdb调试的进程: ID号不是IPD,而是gdb内的info inferiors显示的ID inferior 进程ID号 彻底删除一个进程: 如果该进程正在运行,不能删除。可以使用kill或者detach删除这个进程 remove-inferiors 进程inferiorID 让该进程detach掉,但是该进程还存在,还可以使用r来执行它: kill inferiors 进程inferiorID 下面的命令同上: detach inferiors 进程inferiorID
attach与detach的使用 当我们进入gdb对一个进程调试的时候: 如果想要挂接别的进程来调试,就:attach PID如果想要取消这个挂接的进程,就:detach PID未进入gdb:如果想要对一个程序指定的进程调试,直接输入:gdb attach PID
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/245594.html