WebStorm 无法直接调试 Serverless 函数,因其依赖框架(如 serverless-offline)注入 event/context 等运行时对象;必须通过 sls offline --inspect-brk=9230 启动并用 WebStorm 的 Attach to Node.js 配置连接,端口严格对齐,且优先在 handler 首行写 debugger; 确保命中。

WebStorm 本身不支持 Serverless 函数的本地断点调试,必须靠外部 CLI 启动调试进程 + WebStorm 的 Attach 模式连接 —— 这是根本前提,不是配置漏了就能解决的。
为什么不能直接 Run/Debug 配置 Node.js 脚本?
Serverless 函数(如 handler.js)不是独立可执行的 Node.js 程序,它依赖框架(如 serverless-offline 或 sam local invoke)启动模拟运行时环境。WebStorm 的 Node.js 运行配置会直接 node handler.js,缺少 event、context、process.env 注入,必然报错或逻辑错乱。
- 错误现象:
ReferenceError: event is not defined或Cannot find module 'aws-sdk'(即使已安装) - 正确路径:让
sls offline或sam local invoke启动带--inspect的子进程,再让 WebStorm attach 进去 - WebStorm 的
JavaScript Debug配置也不适用——它只连浏览器,不连本地 Lambda 模拟器
sls offline 调试必须配 launch.json + 命令行参数对齐
WebStorm 不读取 .vscode/launch.json,但你可以用它作为参考模板,在 WebStorm 中手动建一个 Attach to Node.js/Chrome 配置,并严格对齐端口与参数。
- 启动命令必须加
--inspect-brk=9230(不要用默认 9229,避免冲突):sls offline --noAuth --port 3000 --host 0.0.0.0 --inspect-brk=9230 - WebStorm 新建运行配置:
Run → Edit Configurations → + → Attach to Node.js/Chrome -
Host填localhost,Port填9230(必须和命令行一致) - 切勿填写
JavaScript file字段——Attach 模式下该字段应为空 - 启动前确保
sls offline已运行且输出中出现Debugger listening on ws://127.0.0.1:9230/...
断点打在哪才真正生效?
Serverless 函数生命周期极短,WebStorm 图形断点可能因启动太快而错过。最可靠的方式是混合使用:
- 在
handler函数第一行写debugger;(原生语句),它比 UI 断点更早触发 - 图形断点只设在
debugger;之后的代码行,比如解析event.body或调用数据库前 - 避免在
await后直接打断点——V8 可能优化掉中间帧;可在await前加debugger;,再用 Step Into 继续 - 检查 WebStorm 设置:
Settings → Build, Execution, Deployment → Debugger → Stepping,确认未勾选Skip files中包含你的项目路径
常见失败原因就三个,优先排查
90% 的“连不上”问题出在这三处,不用翻文档,直接核对:
-
sls offline是否真的带了--inspect-brk?v10+ 版本默认禁用,不加就等于没开调试通道 - WebStorm 配置的
Port和命令行--inspect-brk=xxx是否完全一致?大小写、空格、等号都不能错 -
functions.hello.handler在serverless.yml里写的路径是否真实存在?比如写成src/handler.hello,但文件其实是src/handler/hello.js—— WebStorm 不校验这个,只有运行时报Cannot find module
复杂点在于:你得同时盯住 CLI 输出、WebStorm Debug 控制台日志、以及浏览器请求是否真触发了函数——三者不同步,调试就卡在“以为连上了,其实没触发”。


















