使用GDB调试多线程程序时如何切换至指定线程上下文
GDB多线程调试:切换线程上下文方法
1. 查看所有线程
暂停调试后,先执行命令列出所有活跃线程,获取目标线程的ID:
info threads
输出会显示每个线程的ID、状态、对应执行的函数等信息,示例如下:
1 Thread 0x7f9b3a9d6700 (LWP 1231) main () at main.c:42 2 Thread 0x7f9b3a1d5700 (LWP 1232) worker_thread () at thread.c:105 * 3 Thread 0x7f9b399d4700 (LWP 1233) io_thread () at io.c:78
其中*标记的是当前GDB所处的线程上下文。
2. 切换到指定线程
直接使用thread命令加上目标线程ID即可切换上下文,比如要切换到线程1234:
thread 1234
执行后GDB会自动切换到该线程的上下文,后续执行的调试命令(如bt、print、step)都会针对这个线程生效。
额外实用技巧
- 切换线程后,可用
bt查看当前线程的调用栈:bt - 如果想在调试单个线程时避免其他线程运行,可开启调度锁:
调试完成后记得关闭:set scheduler-locking onset scheduler-locking off
内容的提问来源于stack exchange,提问作者Kokomelom
相关产品推荐
相关产品推荐

