codelldb 调试失败主因是 lldb 二进制缺失、launch.json 配置错误(program 路径错/无调试符号/type 非 "lldb")或被 c/c++ 扩展劫持;需手动指定 lldbexecutable 路径、禁用冲突扩展并重启 vscode。

CodeLLDB 调试失败,90% 的问题出在 lldb 二进制找不到、launch.json 指向了没调试符号的可执行文件,或者被 C/C++ 扩展悄悄劫持了调试类型——不是插件坏了,是链路断了。
确认系统里真有能跑的 lldb
CodeLLDB 本身不带调试器,它只是个“遥控器”,必须连上本地真实的 lldb 进程。很多人卡在这一步却以为是插件配置错了。
- 打开终端,直接运行
lldb --version;如果报command not found,说明没装或没进PATH - macOS 用户优先用 Homebrew 安装:
brew install llvm,然后检查/opt/homebrew/opt/llvm/bin/lldb(Apple Silicon)或/usr/local/opt/llvm/bin/lldb(Intel)是否存在 - 别信 Xcode 自带的
/usr/bin/lldb——它常因系统更新变砖,尤其在 macOS Sequoia 上兼容性不稳定 - 装完后,在 VSCode 设置里搜
codelldb.lldbExecutable,手动填入你验证过的完整路径,比如/opt/homebrew/opt/llvm/bin/lldb
launch.json 必须满足三个硬条件
配置写得再漂亮,只要 program 路径错、type 不对、或没调试符号,断点就永远灰着。
-
"type"字段必须是"lldb"(不是"cppdbg",那是 C/C++ 扩展用的) -
"program"必须是已编译好、带-g的可执行文件**绝对路径**,例如"${workspaceFolder}/build/myapp";"./main"这种相对路径在某些工作区下会失效 - Rust 用户注意:
cargo build默认不生成调试信息,要加--debug,或确保[profile.dev] debug = true在Cargo.toml里 - Clang 编译时记得加
-O0 -g,避免内联导致断点跳转错乱
为什么断点不命中?先关掉这些扩展
VSCode 允许多个调试器注册同一类型,但实际只能有一个接管。C/C++ 扩展的 cppdbg 会悄悄劫持 lldb 类型,导致 CodeLLDB 启动无声无息。
- 禁用
C/C++扩展(右下角齿轮 → Disable Workspace) - 顺手禁用
Native Debug或Debug Adapter for C/C++ - 禁用后必须重启整个 VSCode 窗口(
Cmd+Q再打开),仅重载窗口不够
调试时变量看不清?加个 .lldbinit
LLDB 默认显示太简略:print vec 只告诉你 size=5,根本看不出越界;print ptr 只打地址,悬垂指针照样显示“有效”。
- 在项目根目录建
.lldbinit,加这三行: settings set target.max-string-summary-length 1024settings set target.debugging-format dwarftype summary add -x "std::.*" --summary-string "${var}"
查野指针时,别只信 print ptr,改用 memory read -f x -c 1 $rdi(或对应寄存器)看内存是否已释放——这点最容易被忽略,也最影响定位效率。











