断点不生效需先启动调试会话,检查VSCode中断点是否实心;Python需配置正确解释器路径和module模式;Node.js注意sourceMap与ESM兼容性;前端调试须禁用压缩并确保debugger上下文有效。

断点不生效:检查调试器是否已正确启动
VSCode 里点左侧行号打的红点,只是“设置断点”,不是“开始调试”。没启动调试会话时,断点是空心的,代码照常跑完,根本不会停。
- 确认已按下
Ctrl+Shift+D(Windows/Linux)或Cmd+Shift+D(macOS)打开调试视图 - 在调试侧边栏顶部选择正确的环境配置(比如
Python: Current File、Node.js: Launch Program),再点绿色三角形 ▶️ 启动 - 如果配置项为空或显示
No Configurations,说明还没生成.vscode/launch.json—— 点齿轮图标自动生成,别跳过这步
Python 断点失效:注意解释器路径和 launch.json 的 module 写法
用 python -m http.server 或 pip install -e . 安装的包里调试,直接 F5 运行脚本文件往往断不住。因为 VSCode 默认按“运行脚本”模式启动,而实际入口是模块导入路径。
- 在
launch.json中优先用"module": "your_package.main"而非"program": "./src/main.py" - 确保
python.defaultInterpreterPath指向你项目真正使用的 Python 解释器(比如 venv 里的./venv/bin/python),而不是系统全局 Python - 如果用了 PyTorch/TensorFlow 等多进程训练,主进程能断住,但子进程(
num_workers > 0)默认不继承调试上下文 —— 此时得加"subProcess": true到 launch 配置中
Node.js 调试时 require() 报错或断点跳过:检查源码映射与 CommonJS/ESM 混用
TS 编译后生成 .js 和 .js.map,但 VSCode 如果找不到 map 文件,或加载了 ESM 模块却用 CommonJS 方式 require,断点就会偏移甚至失效。
- TS 项目务必在
tsconfig.json中开启"sourceMap": true和"inlineSourceMap": false(推荐生成独立.map文件) - Node.js v14+ 默认不支持
import加载本地 TS 文件;若用 ESM,launch.json中需加"runtimeArgs": ["--loader", "ts-node/esm"]并装好ts-node - 检查终端里启动命令是否带
--inspect—— VSCode 调试器依赖这个 flag 建立 WebSocket 连接,手动node --inspect app.js启动时也得配好 attach 模式
Chrome 调试前端代码:断点在压缩 JS 里乱跳,或 debugger 不触发
Webpack/Vite 打包后代码被混淆压缩,VSCode 读不到原始行号;而 debugger 语句是否生效,取决于当前执行上下文是否处于调试器接管范围内。
- 开发环境务必关闭
minify,Vite 中设build.minify = false,Webpack 中关掉TerserPlugin -
debugger只在 DevTools 打开且未禁用断点时才起作用;如果页面是 iframe 加载或跨域资源,需在launch.json中启用"webRoot"并指向真实服务根目录 - React/Vue 等框架的 HMR 热更新会重载模块,导致已设断点丢失 —— 建议在
useEffect或mounted里动态加debugger,比靠左侧行号更可靠
最常被忽略的是:断点位置本身是否可达。比如异步回调里打了断点,但 Promise 被 catch 吞掉错误、或函数根本没被调用,红点再红也没用。先确认逻辑流真走到那里,再谈怎么断。


















