断点不触发大概率因符号表未加载:program路径错(如指向.ts而非编译后.js)、outfiles未匹配输出路径、sourcemaps未启用或调试器未连对进程。

断点不触发,大概率不是 VSCode 坏了,而是符号表根本没加载成功——program路径错、outFiles没匹配、sourcemaps被关了,或者调试器压根连错了进程。
launch.json里program指向源文件还是编译后文件?
这是 TypeScript/JavaScript 项目最常踩的坑。VSCode 调试器实际运行的是 JS 文件,不是 TS;如果 program 写成 "${workspaceFolder}/src/index.ts",它会尝试直接执行 TS 源码(失败),或静默降级为 Node 运行时解释执行(无调试符号)。
-
program必须指向最终执行的 JS 入口,比如"${workspaceFolder}/dist/index.js" - 若想在 TS 源码上设断点,必须配
outFiles+sourceMaps,且构建工具(tsc/vite/webpack)要生成有效.map文件 - 检查
outFiles是否能 glob 到真实输出路径:用ls -l dist/**/*.js确认文件存在,再看outFiles是否漏掉dist或多写了斜杠 - 常见错误写法:
"outFiles": ["./dist/**"](缺.js后缀)、"outFiles": ["dist//**/*.js"](双斜杠破坏 glob)
为什么sourceMap明明生成了,断点还是空心?
空心断点 = 调试器识别到该行可设断点,但无法将 JS 行号映射回 TS 源码。核心是 sourceMap 路径解析失败,而非不存在。
- 确认构建产物 JS 文件末尾有
//# sourceMappingURL=xxx.map,且xxx.map文件与 JS 同目录、可访问 -
launch.json中显式设"sourceMaps": true(默认值可能被覆盖) - 加
"resolveSourceMapLocations": ["${workspaceFolder}/**"],避免调试器在node_modules里瞎找 map 文件卡住 - Webpack 用户注意:
devtool: 'source-map'和devtool: 'inline-source-map'行为不同——后者把 map 嵌进 JS,前者单独发文件;outFiles只对前者生效
C++/C 项目断点未绑定,.pdb 或 .debug 文件在哪?
没有符号文件,调试器就是个睁眼瞎。Windows 下是 .pdb,Linux/macOS 下是可执行文件内嵌的 DWARF 调试段,或独立 .debug 文件。
- 确认构建时用了 Debug 模式:
CMAKE_BUILD_TYPE=Debug,且编译器加了-g(GCC/Clang)或/Zi(MSVC) - 检查
program路径下的同名.pdb(Win)或file.debug(Linux)是否存在;用file ./build/app看是否含debug字样 - VSCode 的
cppdbg扩展默认不读取.debug分离文件,需在launch.json加"miDebuggerPath": "/usr/bin/gdb"并确保 GDB 版本 ≥ 8.2 - 路径含中文或空格?GDB 在某些国产 Linux 发行版(如 UOS)下会解析失败,临时改路径测试
attach模式下断点失效,是不是进程没选对?
用 request: "attach" 时,VSCode 不启动进程,只连已运行的 PID。断点失效,90% 是连错了进程,或目标进程没加载调试符号。
- 用
ps aux | grep your_app或pgrep -f "your_app"精确获取 PID,别靠肉眼数 - 确认该进程是 Debug 编译的:Linux 下
readelf -S ./your_app | grep debug,Windows 下用dumpbin /headers your_app.exe查是否有debugsection - attach 配置里
"processId"必须是数字,不能是字符串;若用"pid"字段(旧版),已废弃,必须换"processId" - 远程 attach(如 WSL/SSH)时,确保
sourceFileMap正确映射 Windows 路径到 Linux 路径,例如{"C:\project\":"/home/user/project/"}
真正卡住人的,往往不是配置写错,而是构建产物和调试配置之间存在“时间差”——改了 launch.json 没重新 build,或改了 tsconfig.json 没清 dist 目录。每次怀疑断点失效,先删构建产物、全量重编、再调试,比翻十页文档更快。











