You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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配置

    • 添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:40:15