Ubuntu下CMake构建的C++程序VS Code断点无法命中求助
VS Code调试CMake C++程序断点不命中?试试这些排查步骤
我之前调试CMake构建的C++项目时也碰到过一模一样的问题,折腾了好一阵才搞定,结合你的情况给你梳理几个关键检查点:
1. 先确认编译时有没有生成调试符号
这是最常见的原因!CMake默认只有Debug模式才会生成调试信息,如果你的构建是Release或者默认模式,断点肯定不生效:
- 检查你执行CMake的命令,是不是加了
-DCMAKE_BUILD_TYPE=Debug?如果没加,立刻重新构建:rm -rf build && mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Debug .. make - 打开你的
CMakeLists.txt,看看有没有硬编码构建类型,比如如果写了set(CMAKE_BUILD_TYPE Release),赶紧改成Debug。
2. 核对launch.json的核心配置
重点看两个地方:
program路径必须和你终端运行的bin/show完全一致,绝对路径或者相对VS Code工作区的路径都可以,比如:"program": "${workspaceFolder}/bin/show",cwd要设置成你终端运行程序时的工作目录(也就是你执行bin/show dat时所在的文件夹),不然不仅可能找不到dat文件,调试器也可能关联不上调试符号:"cwd": "${workspaceFolder}",- 额外确认
miDebuggerPath是正确的GDB路径,Ubuntu下一般是/usr/bin/gdb,终端执行which gdb就能查到。
3. 确保tasks.json的构建任务是Debug版本
如果你的tasks.json是调用make构建,要确保它是在Debug构建目录下执行的:
比如tasks.json可以这么写:
{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "make", "args": [], "options": { "cwd": "${workspaceFolder}/build" // 这里是你的CMake构建目录 }, "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$gcc" } ] }
别让tasks.json去构建Release版本的目标!
4. 验证可执行文件确实带调试符号
终端执行这个命令,检查你的bin/show:
file bin/show
如果输出里有with debug_info或者not stripped,说明调试符号没问题;如果是stripped,那肯定是编译时没开调试参数,回到第一步重新构建。
5. 用GDB手动测试,定位问题
如果上面都没问题,手动用GDB启动程序,看断点能不能命中:
gdb bin/show (gdb) break main (gdb) run dat
- 如果GDB能命中断点:那问题出在VS Code的配置或者缓存上,试试重启VS Code,或者删除
.vscode文件夹重新生成配置。 - 如果GDB也命中不了:那100%是编译的问题,再仔细检查CMake的构建类型和编译参数。
最后再走一遍流程:用Debug模式彻底重建项目 → 确认launch.json路径正确 → 执行tasks.json构建 → 重启VS Code再调试,应该就能解决了!
内容的提问来源于stack exchange,提问作者Summer Sun
相关产品推荐
相关产品推荐

