必须将cmake构建类型设为debug且调试器正确关联kit:在projects→build & run→build中添加cmake参数-dcmake_build_type=debug,点击run cmake,并确保kit中debugger指向有效gdb/cdb路径。

Qt Creator 调试 CMake 项目,核心前提是构建类型必须是 Debug,且调试器(如 gdb 或 lldb)已正确关联到 Kit。不是打开 CMakeLists.txt 就能直接点 ▶️ 进入调试——很多卡在这里是因为构建配置没生效。
确认 Kit 中的构建类型是 Debug
Qt Creator 不会自动把 CMake 项目设为 Debug 模式,它默认用 CMake 的 Default 构建类型(等价于 Release)。你必须显式指定:
- 进入 Projects → Build & Run → Build → CMake arguments
- 在参数框中添加:
-DCMAKE_BUILD_TYPE=Debug - 改完后务必点击 Run CMake(不是仅“Apply”),否则
CMakeCache.txt不更新,构建仍走 Release 流程 - 如果之前已生成过构建目录(如
build/),建议删掉整个目录再重来——CMake 不会自动覆盖旧缓存中的CMAKE_BUILD_TYPE
确保调试器被 Kit 正确识别
即使构建成功,没有可用调试器也会弹出 “No debugger set up for this kit” 错误:
CMake 4.3.2 Windows x86_64 历史版本安装包,适合旧项目兼容、构建环境回退、CMakeLists.txt 迁移验证、Visual Studio/Ninja/Makefile 生成器测试和 C/C++ 项目维护。
- 检查 Projects → Build & Run → Kits → Debugger 是否指向有效的
gdb(Linux/macOS)或cdb(Windows)路径 - Linux 下常见问题:系统装了
gdb,但 Qt Creator 启动时没继承$PATH—— 尤其当你通过桌面快捷方式启动时。解决方法是修改.desktop文件,把 Exec 改成:bash -i -c "/path/to/qtcreator" - Windows 上若用 MSVC 工具链,需单独安装
Debugging Tools for Windows,并确保 Kit 中 Debugger 选的是Auto-detect或手动指定cdb.exe
断点不命中?检查符号和构建产物位置
断点灰色、提示 “no debug information” 或程序直接跑过不停,大概率是二进制没带调试符号或路径错位:
-
add_executable或add_library后,确保没加RELEASE相关属性(如set_property(TARGET xxx PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$:Debug>")是 OK 的,但set(CMAKE_CXX_FLAGS_RELEASE "")之类会干扰) - 检查构建产物路径是否被
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ...)或set(LIBRARY_OUTPUT_PATH ...)修改过;Qt Creator 默认只监控build/下的默认输出子目录(如build/bin/),若你自定义了路径,需在 Projects → Run → Run Settings → Executable 中手动指向正确路径 - Linux 下可手动验证:
file build/bin/your_app应显示 “not stripped”,readelf -S build/bin/your_app | grep debug应有多个.debug_*section
CMakeLists.txt 里写 set(CMAKE_BUILD_TYPE Debug) 有用吗?
基本无效,且容易误导。原因很实在:
- CMake 官方文档明确说明:
CMAKE_BUILD_TYPE只对single-config生成器(如Unix Makefiles、Ninja)有效,且**必须在命令行传入或通过 Qt Creator 的 CMake arguments 设置** - 写在
CMakeLists.txt里属于“运行时设置”,此时构建类型早已确定,该语句不会回溯修改已解析的构建逻辑 - 实测:加了这行后
make clean && make生成的二进制仍是 Release 级别优化,nm -C build/xxx | grep main会发现符号被优化掉
真正起作用的只有两件事:CMake arguments 里带 -DCMAKE_BUILD_TYPE=Debug,以及对应 Kit 的 Debugger 配置真实可用。其余都是障眼法。










