调试时线程面板位于qt creator调试视图底部,标签为「线程」(图标为两个交错圆圈),需在调试模式下断点命中或手动暂停时点击展开;它不自动刷新,须手动触发更新。

能直接看到所有线程的 ID、状态、当前函数和调用栈,但默认不自动刷新,得手动点一下才更新。
调试时线程面板在哪?
调试启动后,Qt Creator 底部状态栏附近会出现「线程」标签(图标像两个交错的圆圈),点击展开即可。它不是一直显示的——只有在断点命中或手动暂停时才激活。如果没看到,确认已进入调试模式(不是运行模式),且程序至少有一个活跃线程(包括主线程)。
为什么刚创建的子线程不显示?
线程面板不会实时轮询,只在调试器停顿时抓取快照。常见场景:
- 子线程刚
start()就执行完并退出,面板来不及捕获 - 断点设在
start()后面,但子线程已跑出函数范围,GDB 没触发上下文切换 - 编译没加
-g或用了-O2,导致 GDB 无法解析线程栈帧,显示为???
实操建议:在子线程 run() 开头加一句 qDebug() ,再设断点;或者用 GDB 命令 <code>info threads 手动查——比 GUI 更及时。
怎么切换到指定线程看变量?
线程面板里双击某一行,就能把当前调试上下文切过去。这时「局部变量」窗格显示的是该线程栈帧里的变量,「调用栈」也变成它的路径。但注意:
- 切换后单步(
step over)只影响当前线程,其他线程继续跑 - 如果想冻结其他线程配合分析,得在调试器启动命令里加
set scheduler-locking on(慎用,可能引发死锁) - 右键断点 → «条件» → 输入
thread()==2,可让断点只在 ID 为 2 的线程触发
线程名为什么显示为空或 ???
两种情况:
-
QThread::currentThread()->objectName()未设置过,返回空字符串;需在构造或start()前调用setObjectName("Worker") - GDB 版本太老(如
gdb 7.12),对std::thread或 Qt6 的线程栈解析不全;换用gdb 9.2+或系统自带新版
真正稳定的线程标识还是 QThread::currentThreadId(),它返回 quint64,不受命名影响,也无需依赖调试器解析能力。











