暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

gdb调试中切换线程

DBA札记 2024-08-02
200

在 GDB 中切换线程可以使用以下命令:

  1. info threads
    : 查看当前进程中所有的线程。
  2. thread N
    : 切换到线程 N,其中 N 是线程号。
  3. 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札记,一起交流数据库技术。欢迎觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!谢谢大家。

文章转载自DBA札记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论