★ 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           查看线程锁的状态

 

 

参考:

http://c.biancheng.net/view/8261.html

https://www.cnblogs.com/pugang/p/7698772.html

posted on 2021-01-16 21:33  zhongqing  阅读(204)  评论(0编辑  收藏  举报