★ 4-调试多线程
查看所有线程
(gdb) thread 3 [Switching to thread 3 (Thread 0x7fffe6e5d700 (LWP 34369))] #0 memset () at ../sysdeps/x86_64/memset.S:93 93 ../sysdeps/x86_64/memset.S: No such file or directory.
执行特定线程
thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command thread apply all command 让所有被调试线程执行GDB命令command // command 表示要目标线程执行的操作,例如 next、continue 等
指定线程设置断点
(gdb) break location thread id // break 7 thread 3 (gdb) break location thread id if...
location 表示设置断点的具体位置;id 表示断点要作用的线程的编号;
if... 参数作用指定断点激活的条件,即只有条件符合时,断点才会发挥作用。
默认情况下,当某个线程执行遇到断点时,GDB 调试器会自动将该线程作为当前线程,并提示用户 "Switching to Thread n",其中 n 即为新的当前线程。
调试线程锁
默认情况下,无论哪个线程暂停执行,其它线程都会随即暂停;反之,一旦某个线程启动(借助 next、step、continue 命令),其它线程也随即启动。 GDB 调试默认的这种调试模式(称为全停止模式)。
set scheduler-locking off|on|step // 使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的 set scheduler-locking off off 不锁定任何线程,也就是所有线程都执行,这是默认值 set scheduler-locking on on 为锁定当前线程 show scheduler-locking 查看线程锁的状态
参考:
个人学习笔记,网络内容搬运工,喜欢的点个赞,如有侵权请联系删除。