在VS Code中用LLDB调试Google Unit Test时断点未触发的问题
调试GTest二进制断点不触发的排查点
确保二进制包含调试符号
Bazel默认以Release模式编译,生成的二进制没有调试信息,LLDB无法识别断点。编译时必须添加调试编译参数:bazel build //src:leet_test --compilation_mode=dbg也可以加上关闭优化的参数,避免代码内联导致断点失效:
bazel build //src:leet_test --compilation_mode=dbg --copt=-O0检查断点位置有效性
- 确认断点所在的测试用例确实会被执行:如果launch.json的
args为空,GTest会运行所有测试,但如果断点在未执行的用例里,自然不会触发。 - 配置源码路径映射:Bazel编译时会在沙箱内处理源码,可能导致LLDB无法关联本地源码与二进制调试信息。在launch.json中添加
sourceFileMap,将编译沙箱内的路径映射到本地工作区:
具体沙箱路径可通过"sourceFileMap": { "/private/var/tmp/_bazel_rashmii/...": "${workspaceFolder}" }bazel info execution_root命令获取。
- 确认断点所在的测试用例确实会被执行:如果launch.json的
完善launch.json配置
- 添加
preLaunchTask,确保每次调试前自动编译带调试信息的二进制,避免使用旧的Release版本。先在tasks.json中定义编译任务,再在launch.json中关联:"preLaunchTask": "build-gtest-dbg" - 临时开启
stopAtEntry: true,验证调试器是否能正常启动并暂停在入口点,排除调试器本身的问题。
- 添加
检查调试器环境
- 确保VS Code的C/C++插件(cpptools)为最新版本,旧版本可能存在LLDB兼容性问题。
- 终端手动验证LLDB:执行
lldb /Users/rashmii/Documents/cpp_project/bazel-bin/src/leet_test,手动设置断点并运行,确认是否能触发,排除VS Code配置问题。
内容的提问来源于stack exchange,提问作者RASHMI INGLE
相关产品推荐
相关产品推荐

