一、多线程调试最重要的几个命令:
info threads :查看当前进程的线程。GDB会为每一个线程分配一个ID,后面操作线程的时候会用到这个ID,前面有*的是当前调试的线程。
thread :切换调试的线程为指定ID的线程。
Break file.c :100thread all 在file.c 文件第100行处为所有经过这里的线程设置断点。
set scheduler-locking off|on|step 在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时进行的,
注:怎么只让被调试程序执行呢?
off 不锁定任何进程,也就是说所有的进程都执行,这是默认的。
on 只有当前被调试程序会执行
step 在单步的 时候,除了next过一个函数的情况以外,只有当前进程 会执行。
thread apply ID1 ID2 command :让一个或多个线程执行GDB命令command。
thread apply all command :让所有被执行程序执行GDB命令command
二、command命令
如何自动化调试。
这里将为大家介绍command命令,简单的解释一下,其就是把一组gdb的命令打包,有点像字处理软件的“宏”。
当我们的断点到达时,自动执行command中的命令。
三、GDB对多进程的调试
在默认条件下,在调试多进程的时候GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。
follow-fork-mode detack-on-fork 说明:
parent | on | 只调试主进程(GDB调试) |
child | on | 只调试子进程 |
parent | off | 同时调试俩个进程,gdb跟主进程,子进程block在fork位置 |
child | off | 同时调试俩个进程,gdb跟子进程,主进程block在fork位置 |
设置方法:
set follow-fork-mode [parent|child]
set detach-on-fork[on|off]
查询正在调试的进程:
info inferiors
切换调试的进程:
inferiors <infer number>
添加新的调试进程:
add-inferior[-copies n][-exec executable],可以用file executable 来分配给inferior可执行文件。