断点不生效八成是调试流程未真正启动,根源在于launch.json配置错误(如program路径不存在、cwd设错)、解释器不匹配、扩展未加载或环境变量未刷新。

断点不生效,八成不是代码或编辑器坏了,而是调试流程根本没真正启动——launch.json 配置错、解释器没对上、扩展没加载,或者 VS Code 进程压根没读到你改过的环境变量。
检查 launch.json 的 program 和 cwd 是否真实存在
VS Code 不校验路径是否存在,只照字面执行。路径错一个字符、大小写不符、少一级目录,都会静默失败,或报 Cannot find program。
- 在终端里先
cd ${workspaceFolder},再手动执行ls -l ./src/index.js(Linux/macOS)或dir .srcindex.js(Windows),确认文件真在那里 -
program写"${file}"时,必须当前打开的是你要调试的文件;否则换用绝对路径,比如"${workspaceFolder}/src/server.js" -
cwd设错会导致模块导入失败、配置文件读不到——比如项目依赖./config.yaml,但cwd是${workspaceFolder}/dist,那它实际找的是dist/./config.yaml - Windows 上路径用反斜杠必须双写:
"C:\project\main.js";更推荐统一用正斜杠:"C:/project/main.js"
确认调试器扩展已安装且解释器路径匹配
断点只是标记,真正跑起来靠扩展和解释器。Python 要 debugpy,Node.js 要对应版本的 node,Java 要 java-debug——缺一不可。
- Python:运行
python -m pip install debugpy,别依赖扩展自动装;底部状态栏必须显示完整路径,如/myproj/.venv/bin/python,不能只写Python 3.12 - Node.js:检查
runtimeExecutable字段是否指向真实node,比如"${env:NVM_BIN}/node";若用nvm,终端里先echo $NVM_BIN确保有输出 - Java:虚拟线程需加 JVM 参数
"--enable-preview"和"-source","21"到vmArgs,否则断点无法捕获上下文 - JavaScript(浏览器):
type必须是"pwa-chrome",不是旧版"chrome";url必须和浏览器地址栏**完全一致**,包括协议、端口、末尾斜杠
重载窗口不是重启,而是清缓存+重连服务
“重新加载窗口”不会关文件、丢光标、清终端,但它会强制卸载所有扩展、重连语言服务器(LSP)、刷新 Monaco 编辑器状态——这是解决“明明配置对了却没反应”的最快操作。
- 按
Ctrl+Shift+P→ 输入Developer: Reload Window执行(macOS 是Cmd+Shift+P) - 重载后立刻检查右下角语言模式(如
JavaScript)和解释器路径是否更新 - 如果 ESLint/Prettier 失效,再顺手执行
ESLint: Restart ESLint Server或Prettier: Restart Prettier Server - 别在重载前禁用扩展——重载本身就会清掉扩展宿主进程,禁用反而干扰判断
最容易被忽略的点:VS Code 启动时读取的环境变量(比如 NVM_BIN、VOLTA_HOME)是快照,升级或切换 Node 版本后,必须彻底退出所有进程再从终端启动 code .,否则调试器永远走旧路径。











