断点不命中主因是launch.json中program路径错误或sourcemaps未加载成功;program须指向真实js可执行文件而非ts源码,且需同时满足ts开启sourcemap、构建输出.map文件、launch.json配准outfiles与resolvesourcemaplocations三条件。

断点不命中,八成是 launch.json 里 program 指错了路径,或 sourceMaps 根本没加载成功——不是 VSCode 坏了,是调试器压根没找到源码和运行代码的映射关系。
program 字段必须指向真实可执行文件,不是源码
Node.js/TypeScript 项目里写 "program": "${workspaceFolder}/src/index.ts" 是最常见错误。VSCode 调试器实际运行的是 JS,不是 TS;它要么静默失败,要么降级为无符号解释执行,断点自然无效。
- 正确做法:指向构建产物,比如
"program": "${workspaceFolder}/dist/index.js" - 如果想在 TS 源码上设断点,必须同时满足三个条件:TS 编译开启
"sourceMap": true、构建工具(tsc/vite/webpack)输出.js.map文件、launch.json中配好outFiles和resolveSourceMapLocations - 验证方法:用
ls -l dist/**/*.js确认文件存在,再检查outFiles是否漏掉dist/前缀或写成"dist//**/*.js"(双斜杠会破坏 glob)
sourceMap 加载失败,空心断点就是信号
断点变为空心红点,说明调试器识别到该行可设点,但无法把 JS 行号映射回 TS 源码。核心不是 map 文件不存在,而是路径解析失败。
- 确认生成的
.js文件末尾有//# sourceMappingURL=xxx.map,且xxx.map与 JS 同目录、可读 -
launch.json中显式加"sourceMaps": true(默认值可能被覆盖) - Webpack 用户注意:
devtool: "source-map"和devtool: "inline-source-map"行为不同;outFiles只对前者生效,后者把 map 嵌进 JS,无需outFiles - VSCode 插件调试时,
sourceMapPathOverrides必须严格匹配 webpack 输出的sources字段,比如"webpack:///./src/*": "${workspaceFolder}/src/*",少一个点或斜杠都会失败
C/C++ 项目断点未绑定,先找符号文件在哪
没有 .pdb(Windows)或 DWARF 调试段(Linux/macOS),调试器就是睁眼瞎。空心断点 = 符号没加载,不是代码没跑。
- 构建必须用
CMAKE_BUILD_TYPE=Debug,且编译器加-g(GCC/Clang)或/Zi(MSVC) - 检查
program指向的可执行文件同目录下是否有同名.pdb(Win)或是否含 debug 信息(用file ./build/app查看) - Linux 下若用了分离的
.debug文件,cppdbg默认不读;需确保 GDB ≥ 8.2,并在launch.json中指定"miDebuggerPath": "/usr/bin/gdb" - 路径含中文或空格?某些国产 Linux 发行版(如 UOS)下 GDB 会解析失败
Attach 模式连不上,90% 是远程端没装调试扩展
本地 VSCode 看起来一切正常,但远程服务器上没反应,问题几乎全出在“调试适配器没过去”。
- Remote-SSH 模式下,所有语言扩展(Python、js-debug、C/C++)必须在远程端重新安装——本地装了完全没用
- 在
settings.json加"remote.ssh.logLevel": "debug",然后打开“输出”面板 → 切到 “Remote-SSH” 标签,看有没有报扩展未安装或初始化失败 - Attach 时确认目标进程已用
--inspect=9229(Node)或-g(GDB)启动,且端口与launch.json中port字段一致 - 避免多个 Node 进程同时监听同一端口,造成连接混淆
真正卡住人的,往往不是某一个配置项写错,而是几个环节串在一起失效:比如 tsc 编译没开 sourceMap、webpack devtool 用了 eval、outFiles 又漏写了 dist/,最后还忘了在 launch.json 里设 "sourceMaps": true。每个环节单独看都简单,合起来就容易漏掉一环。











