在 GDB 中切换线程可以使用以下命令:
info threads
: 查看当前进程中所有的线程。thread N
: 切换到线程 N,其中 N 是线程号。set scheduler-locking off/on/step
: 设置调度器锁定模式。off
: 允许所有线程运行。on
: 只有当前线程被允许运行。step
: 只有当前线程和被调试的线程被允许运行。
示例:
(gdb) info threads
Id Target Id Frame
* 1 Thread 0x7ffff7ffa740 (LWP 23456) "program" 0x00007ffff7de5390 in __GI___libc_read (fd=0, buf=0x7fffffffe4e0, nbytes=4096) at ../sysdeps/unix/sysv/linux/read.c:27
2 Thread 0x7ffff77fe740 (LWP 23457) "program" 0x00007ffff7de5390 in __GI___libc_read (fd=0, buf=0x7fffffffe4e0, nbytes=4096) at ../sysdeps/unix/sysv/linux/read.c:27
3 Thread 0x7ffff6ffd740 (LWP 23458) "program" 0x00007ffff7de5390 in __GI___libc_read (fd=0, buf=0x7fffffffe4e0, nbytes=4096) at ../sysdeps/unix/sysv/linux/read.c:27
(gdb) thread 2
[Switching to thread 2 (Thread 0x7ffff77fe740 (LWP 23457))]
#0 0x00007ffff7de5390 in __GI___libc_read (fd=0, buf=0x7fffffffe4e0, nbytes=4096) at ../sysdeps/unix/sysv/linux/read.c:27
(gdb) set scheduler-locking on
(gdb) next
这样就可以在不同的线程之间切换,并控制线程的调度。scheduler-locking
命令可以限制 GDB 只调试当前线程,从而避免因为其他线程的影响而产生问题。
文章转载自DBA札记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




