一 .fork子进程后的调试状态
fork子进程后的调试状态与两个选项相关,follow-fork-mode(默认值:parent) 和 detach-on-fork(默认值:on)
follow-fork-mode | detach-on-fork | fork后的调试状态 |
---|---|---|
parent | on | 只调试父进程 |
child | on | 只调试子进程 |
parent | off | 父子进程都调试,gdb当前调式父进程,子进程暂挂在fork后 |
child | off | 父子进程都调试,gdb当前调式子进程,父进程暂挂在fork后 |
二 .多进程调试命令 inferiors
查询正在调试的进程:info inferiors
(gdb) info inferiors
Num Description Executable
3 <null> /home/read_ng/c_workplace/proc_gdb/test
* 2 process 17619 /home/read_ng/c_workplace/proc_gdb/test
1 process 17594 /home/read_ng/c_workplace/proc_gdb/test
切换调 试的进程: inferior
(gdb) inferior 3
[Switching to inferior 3 [process 0] (/home/read_ng/c_workplace/proc_gdb/test)]
(gdb)
启动新进程,并加入到当前的调试:
add-inferior [-copies n] [-exec executable]
n表示执行次数,executable表示可执行文件
(gdb) add-inferior -exec ./test
Added inferior 4
Reading symbols from /home/read_ng/c_workplace/proc_gdb/test...done.
(gdb)
脱离调试进程:detach inferior infno
不再调试进程 infno, 此进程会继续执行
kill掉调试进程: kill inferior infno
不再调试进程 infno, 此进程会被杀死
detach 或者kill掉一个inferior后,执行info inferiors 还会显示此inferior,如果执行此 run infno,会按照之前的这个inferior重新启动并调试此inferior;
或者直接执行remove-inferior infno, 之后执行info inferiors 显不会再显示此inferior
三 .多线程调试
1.non-stop 模式
当一个线程遇到断点挂住时,其它线程不受影响,继续执行
2.all-stop mod
当一个线程遇到断点挂住时,其它线程也挂住
scheduler-locking mode [on | off | step]
on:当前线程恢复运行时(如执行next),所有线程都恢复运行
off:当前线程恢复运行时,其它线程保持挂住状态
step:当前线程执行单步调试时(step,或者next 非函数调用),只有本线程恢复执行, 执行continue(或者其它非单步调试执行)时,所有线程恢复执行
schedule-multiple mode [on | off]
on 当前线程恢复时,其它进程的线程和本进程的线程同时恢复执行
off 当前线程恢复时,不会导致其它进程的线程恢复执行
四.常用调试命令