断点不生效主因是调试流程未启动:VSCode未连上进程、未加载符号或进程未启用调试模式;空心圆提示“unbound breakpoint”表明断点位置被识别但无法绑定到可执行代码,需检查program路径(必须指向编译后.js而非.ts)、sourceMaps/outFiles配置、调试器类型及进程启动参数。

断点不生效,90% 是调试流程根本没跑起来——不是代码问题,是 VSCode 没连上、没加载符号、或压根没启动带调试能力的进程。
断点显示空心圆(unbound breakpoint)
这是最直接的失效信号,说明调试器识别到断点位置,但无法将其绑定到实际可执行代码上。
- 检查是否打在不可执行位置:
return后的换行、jsx标签闭合处、<template>区域、注释行或空行——这些地方没有对应 JS 生成,VSCode 会直接拒绝绑定 - 确保光标落在真实语句首字符上再设断点,比如
const x = 1;的c或console.log()的c - Node/TS 项目中,若
program指向.ts源文件(如"${workspaceFolder}/src/index.ts"),VSCode 会静默降级为普通 Node 执行,无符号加载 → 必须指向编译后.js入口
launch.json 配置三处硬伤
三项写错,断点基本白设,且常无明确报错,只表现为“F5 启动→日志刷完→退出”。
-
"type"必须严格匹配:Python 项目写"python"(小写,非"Python"或"Type");Node 写"node"(别用"pwa-node",老项目易 fallback 失败) -
"program"或"module"要和启动方式一致:"program": "${file}"适合单脚本;"module": "mypackage.cli"适合python -m场景;混用会导致 import 失败,断点不触发 -
"console"推荐先设为"integratedTerminal":Windows 下"externalTerminal"常因权限/路径失败;Mac/Linux 下尤其要注意终端 PATH 是否被 VSCode 继承
Source map 加载失败(TS/JS/Vue/React 通用)
断点能设上、也变实心,但停在错误行号,或变量显示为空——大概率是 source map 映射链断裂。
- 确认构建产物里真有
.js.map文件:比如dist/index.js同目录下必须存在dist/index.js.map,且文件末尾含//# sourceMappingURL=index.js.map -
launch.json中"sourceMaps": true必须显式写出(默认值可能被覆盖);"outFiles"必须精确匹配输出路径,例如["${workspaceFolder}/dist/**/*.js"]——漏掉**或写成./dist/**都会导致扫描失败 - 多包或非标准源码路径(如
packages/core/src)需加"resolveSourceMapLocations",例如["${workspaceFolder}/packages/**/src/**", "!**/node_modules/**"],否则调试器跳过这些目录
C++/C 项目断点未绑定
空心断点 + “尚未为此文档加载任何符号” 提示,本质是调试器找不到符号文件(.pdb 或 DWARF 段)。
- 构建必须用
CMAKE_BUILD_TYPE=Debug,且编译器加调试标志:-g(GCC/Clang)或/Zi(MSVC);file ./build/app应显示with debug_info - Windows 下检查同目录是否有
app.pdb;Linux/macOS 下确认可执行文件内嵌 DWARF,或存在分离的app.debug文件 -
cppdbg扩展默认不读.debug分离文件,需在launch.json中指定"miDebuggerPath": "/usr/bin/gdb",并确保 GDB ≥ 8.2
真正关键的验证动作,不是看断点变红,而是在「调试控制台」里搜 Loaded source map from: —— 出现这条日志,才代表符号加载成功;没它,所有断点都是空中楼阁。


















