使用gdb调试多线程时,和调试单线程时类似,但是需要附加使用几个命令来协助进行线程切换。
a-首先是使用info threads查看当前有哪些线程,当前所在线程。
b-然后使用threads id切换到其它线程。
c-最后用thread apply id|all command 来把命令在某线程或所有线程下执行,这里的command就是你平常敲的gdb命令。例如,你是否遇到过在线程里设置断点,程序停住之后,你试图按下n单步运行,你会发现运行的下一步并非是本线程断点的下一条语句,有点找不到北。其实应该执行thread apply id n , id替换成通过thread id查看到的id。
d-线程来回切换比较麻烦,我们可以锁定只执行某个线程:
只运行当前线程:set scheduler-locking on
取消锁定:set scheduler-locking off
来个实例实战下。
#include <pthread.h>
#include <stdio.h>