launch.json 的 program 字段必须指向 .build/debug/ 下带 DWARF 符号的真实二进制,且需确保 sourcekit-lsp 正常运行、LLDB 版本匹配(如 Swift 5.9 需 lldb-18)、LD_LIBRARY_PATH 正确设置,三者缺一将导致调试静默失败。

launch.json 必须指向 .build/debug/ 下的真实二进制
VSCode 的调试器不理解 swift run 命令,也不支持直接调试 .swift 源文件。它只加载带 DWARF 调试符号的可执行文件,而 Swift 默认只在 debug 模式下生成这些符号。
-
program字段必须写成绝对路径,例如".build/x86_64-unknown-linux-gnu/debug/MyApp"(Linux)或".build/debug/MyApp"(macOS),不能写"./main.swift"或"swift run MyApp" - 如果项目用
swift package init --type executable创建,可执行名默认和包名一致;改过Package.swift中的products名称,就得同步更新program路径 - 构建前没清缓存?运行
swift build --configuration debug后仍找不到二进制,先删掉整个.build/目录再重试
LLDB 版本必须与 Swift 工具链匹配
Swift 5.9+ 使用的 DWARF 格式和符号约定已更新,旧版 LLDB(如 Ubuntu 自带的 lldb-14)无法解析,会导致断点灰色、变量显示 <error type></error>、控制台报 no debug adapter。
- Ubuntu/Debian 系统应安装
lldb-18(对应 Swift 5.9),命令:sudo apt install lldb-18 liblldb-18-dev - 在
launch.json的configurations里显式指定"miDebuggerPath": "/usr/bin/lldb-18",不要依赖自动发现 - macOS 用户若用 Xcode 工具链,
lldb已内置,但需确保xcode-select -p指向正确路径,否则 VSCode 可能调用系统旧版
sourcekit-lsp 正常运行是调试前提
很多人卡在“断点不命中”,其实根本原因是语言服务器压根没起来——VSCode 的 Swift 插件只是个壳,sourcekit-lsp 进程挂了,编辑器连语法树都拿不到,更别说把断点映射到源码行号。
- 终端执行
sourcekit-lsp --help,有输出才说明二进制存在且可执行;报command not found就别调launch.json,先修PATH或填绝对路径 - VSCode 设置中必须手动填
swift.path.sourceKitLSP,值为完整路径,例如/opt/swift/usr/bin/sourcekit-lsp(Linux)或/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp(macOS) - 填完后务必重载窗口(
Cmd+Shift+P→Developer: Reload Window),否则设置不生效
LD_LIBRARY_PATH 不设置,调试时会找不到 Swift 运行时
Linux 下调试失败报 error: unable to load standard library,不是代码问题,而是动态链接器找不到 libswiftCore.so 等核心库。VSCode 启动时不会自动继承你在终端里设的环境变量。
- 在项目根目录的
.vscode/settings.json中加一行:"terminal.integrated.env.linux": { "LD_LIBRARY_PATH": "/opt/swift/usr/lib/swift/linux:$LD_LIBRARY_PATH" }(路径按swift --version输出的实际位置调整) - 或者更彻底:把
export LD_LIBRARY_PATH="/opt/swift/usr/lib/swift/linux:$LD_LIBRARY_PATH"加入~/.bashrc,然后用 VSCode 图标启动(而非终端里code .),避免 shell 环境丢失 - WSL2 用户注意:Windows 启动的 VSCode 不读 Linux 的
~/.bashrc,必须用 WSL 命令行启动code .才能继承变量


















