VSCode本身不拦截异常,必须依赖调试器(如debugpy、pwa-node)监听并中断;Python需设"justMyCode": false并勾选raised/uncaught异常断点,Node.js须通过F5启动、正确配置launch.json且区分同步/异步异常类型。

VSCode 本身不拦截异常,必须靠调试器(如 debugpy、pwa-node)在运行时监听并中断;配置错 launch.json 或没启用对应断点类型,异常照样一闪而过。
Python 中异常不中断?检查 justMyCode 和断点勾选状态
默认情况下,Python 调试器只在你自己的代码里停,第三方库(如 requests、pandas)抛的异常直接跳过。
- 在
.vscode/launch.json的 Python 配置中,必须显式设"justMyCode": false - 启动调试后,打开「运行和调试」侧边栏 → 「断点」视图 → 展开「Python Exception Breakpoint」→ 勾选
raised(抛出即停)或uncaught(未捕获才停) - 勾选后无需重启调试会话,但若已运行中,需手动点「重新启动」才能加载新规则
- 注意:
try...except里写raise Exception("xxx")会丢原始堆栈,调试器无法定位到最初抛出处
Node.js 的 throw 没反应?确认调试器已挂载 + 异步场景要分开处理
用 node script.js 直接运行,调试器根本没加载,异常断点完全无效。
- 必须通过 VSCode 启动调试(F5),且
launch.json中"type"是"pwa-node"或"node"(新版推荐前者) - 异步异常(
Promise.reject()、async函数里throw)需额外勾选「Uncaught Exceptions」,仅勾「Caught Exceptions」不会中断 - Express/Koa 等框架常全局捕获错误,导致异常变成「已捕获」状态,此时要勾
raised才能停在throw行 - 若用了
process.on("uncaughtException")或domain,异常会被提前吞掉,调试器收不到
JavaScript 异常断点对 SyntaxError 无效,别白费劲
语法错误发生在代码解析阶段,V8/Chakra 引擎还没开始执行,调试器根本没机会介入。
- VSCode 的「异常断点」只响应运行时抛出的
Error实例(throw new TypeError()、throw new Error()等) -
Promise拒绝(unhandledrejection)可被拦截,但前提是没被.catch()或try/catch await捕获 - 前端项目若用 webpack/vite 构建,确保
sourceMap开启且路径映射正确,否则中断位置可能指向打包后文件 - 不要在条件断点里写副作用语句(如
i++、console.log()),调试器不保证执行顺序,可能跳过或重复触发
最易忽略的一点:多根工作区(multi-root workspace)下,launch.json 只对当前激活的文件夹生效,切错文件夹就等于没配。











