gdb调试多线程多进程
多线程
1、info threads:
这条命令显示的是当前可调试的所有线程,GDB会给每一个线程都分配一个ID。前面有*的线程是当前正在调试的线程。
2、thread ID:
切换到当前调试的线程为指定为ID的线程。
3、thread apply all command:
让所有被调试的线程都执行command命令
4、thread apply ID1 ID2 … command:
这条命令是让线程编号是ID1,ID2…等等的线程都执行command命令
5、set scheduler-locking off|on|step:
在使用step或continue命令调试当前被调试线程的时候,其他线程也是同时执行的,如果我们只想要被调试的线程执行,而其他线程停止等待,那就要锁定要调试的线程,只让它运行。
off:不锁定任何线程,所有线程都执行。
on:只有当前被调试的线程会执行。
step:阻止其他线程在当前线程单步调试的时候抢占当前线程。只有当next、continue、util以及finish的时候,其他线程才会获得重新运行的。
6、show scheduler-locking:
这条命令是为了查看当前锁定线程的模式。
7.i threads
实现线程间切换
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SOxMjNxQjMz0iN0UjMxYjMxETOxcDM4EDMy0CO2EDMwMTMvw1NwgTMwIzLchjNxADMzEzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
9.-g -rdynamic
在生成调试信息的时候加入 -g -rdynamic选项,然后gdb启动调试程序时,直接run,就能找出错误信息所在的地方
一个小提示:
在输入gdb xx时,进入gdb命令,这时会输出一些信息。如上所示,这些信息大多都是关于gdb的一些信息,可以不让他输出,
如:gdb -q xx
多进程
follow-fork-mode | detach-on-fork | 说明 |
parent | on | 只调试主进程(GDB默认) |
child | 只调试子进程 | |
off | 同时调试两个进程,gdb 跟主进程, 子进程 block 在 fork 位置 | |
同时调试两个进程, gdb 跟子进程, 主进程 block 在 fork 位置 |