f5调试前必须确认调试器正确、可执行文件含调试信息、工作目录设置无误:qt creator通过构建套件(kit)选择gdb/cdb/lldb,需在“工具→选项→构建与运行→调试器”中验证状态为ready;断点不触发或变量显示通常因实际运行release版本或缺失-g编译选项;工作目录错误会导致资源路径失效,应配置项目运行设置中的工作目录或使用qapplication::applicationdirpath()动态获取。

F5 启动调试前,得先确认三件事:调试器装对了、可执行文件带调试信息、工作目录设对了。缺一不可,否则断点不命中、变量全显示 <optimized out></optimized>、路径相关逻辑直接失效。
怎么确认 Qt Creator 正在用 GDB / CDB / LLDB?
Qt Creator 本身不自带调试器,它只是图形前端。实际用哪个,取决于你当前的构建套件(Kit):
- Linux/macOS + GCC → 默认走
gdb,版本不能低于 6.8; - Windows + MSVC → 必须装
Debugging Tools for Windows(含cdb),路径要能被 Qt Creator 扫到(通常是%ProgramFiles%\Windows Kits\10\Debuggers\); - macOS + Clang → 用
lldb,Xcode 命令行工具装好就行。
检查方式:菜单栏 工具 → 选项 → 构建与运行 → 调试器,看列表里有没有对应调试器,状态是不是 “Ready”。没看到?说明没被自动识别,得手动添加路径。
为什么断点不触发,或变量显示为 <optimized out></optimized>?
这是最常踩的坑——你可能正在 Debug 模式下编译,但实际跑的是 Release 版本,或者 Release 版本根本没带调试信息。
- 确保构建配置选的是
Debug(左下角 Kit 旁下拉框); - 如果非要调 Release 版,必须在
.pro文件里加:CONFIG+=force_debug_info,或手动写:QMAKE_CXXFLAGS_RELEASE += -g(Linux/macOS)、QMAKE_CXXFLAGS_RELEASE += -Zi(Windows MSVC); - 改完
.pro后,务必右键项目 → 重新运行 qmake,再 rebuild,否则修改不生效。
程序读不到资源文件,是因为工作目录错了
你在终端里执行 /path/to/app 和 cd /path/to && ./app 行为不同,本质是工作目录(current working directory)变了。Qt Creator 默认以构建目录为工作目录,不是可执行文件所在目录。
- 进 项目 → 运行 → 工作目录,填
%{buildDir}(构建目录)、%{sourceDir}(源码目录)或绝对路径; - 更稳妥的做法:代码里别依赖相对路径,改用
QApplication::applicationDirPath()拼资源路径; - 调试时右下角“应用程序输出”面板里,第一行会打印实际工作目录,对照着看就清楚问题出在哪。
远程调试或 Attach 到已有进程怎么配?
本地调试跑通了,不代表远程或后台服务就能直接调——Attach 模式需要符号和内存布局严格匹配。
- 远程设备:先在 工具 → 选项 → 设备 里添加 Generic Linux Device,填 SSH 信息;再在项目“运行”设置里选该设备,部署后勾选“运行后附加调试器”;
- Attach 到进程:菜单 调试 → 附加到进程,选中目标 PID,但前提是——该进程必须由你本地编译、带调试符号、且未 strip;
- Windows 下 Attach 到
cdb还需额外指定符号路径(工具 → 选项 → 调试器 → CDB → 符号路径),尤其是调 Qt 库时,得把QtInstallDir/Tools/QtCreator/share/qtcreator/debugger/symbols加进去。
真正麻烦的从来不是按 F5,而是调试器找不到符号、工作目录错位、Release 版没 -g、Attach 时进程已优化掉帧信息——这些细节不抠清楚,断点永远是灰色的。











