VSCode调试Serverless必须CLI、插件、配置三者严格对齐;只保留Debugger for Chrome(或Edge)和Serverless IDE两个插件,禁用过时的Serverless Framework Extension;sls offline须加--inspect(v10+)或--debug(旧版),launch.json设为attach模式、端口9229,handler路径须带后缀且大小写精确。

VSCode 本身不提供 Serverless 支持,调试和部署必须靠 CLI、插件、配置三者严格对齐;本地断点不生效、Cannot find module './handler'、部署卡在 S3 或 IAM——八成不是代码问题,而是这三处没配对。
该装哪几个插件,哪些必须禁用
只保留两个有效插件,其余全禁用:
-
Debugger for Chrome或Debugger for Edge:它不是调浏览器的,是通过 Node.js 的--inspect协议 attach 到sls offline启动的函数进程 -
Serverless IDE:实时校验serverless.yml中functions.hello.handler是否指向真实存在的文件(比如写成src/handlers/hello.js但实际是src/functions/hello.js,它会高亮报错) - 务必禁用
Serverless Framework Extension:长期未更新,v3 不兼容,还会干扰slsCLI 的 PATH 查找
sls offline 启动时必须加 --debug 或 --inspect
不加调试参数,sls offline 就只是个普通 HTTP 服务,不会暴露 V8 inspector 接口,VSCode 根本连不到。
- 旧版
serverless-offline(v9 及以下):用sls offline --debug - 新版
serverless-offline@10+(2026 年主流):默认禁用--inspect,必须显式加--inspect,例如:sls offline --inspect --noAuth --port 3000 - 断点只在函数被触发时生效——得先发请求(如
curl http://localhost:3000/dev/hello),VSCode 才会捕获调试上下文
.vscode/launch.json 必须设为 attach 模式
sls offline 是长期运行的服务进程,不是执行完就退出的脚本,所以 VSCode 调试器不能选 launch,必须用 attach。
- 配置中
type必须是"node",request必须是"attach" -
port填9229(sls offline默认端口),不要改 -
localRoot设为"${workspaceFolder}",remoteRoot设为"/var/task"(Lambda 容器内路径,保持一致才能映射断点) - 如果用了
aws-sam方案,则应配type: "aws-sam",且依赖AWS Toolkit插件自动生成配置,此时不要混用node+attach
serverless.yml 中 handler 路径错一个字符就白配
本地调试失败,八成卡在这儿。VSCode 不会自动修正拼写,Serverless IDE 能高亮但不阻止你保存错误路径。
-
functions.hello.handler值必须是可require()的相对路径,且后缀不能省:写成src/functions/hello.js可以,写成src/functions/hello会报Cannot find module - 路径区分大小写,Linux 容器里
Hello.js≠hello.js - 如果
serverless.yml在子目录(如infra/serverless.yml),需用package.patterns显式包含 handler 文件,否则打包时漏掉
最常被忽略的是:所有环节都必须对齐——插件装对、CLI 参数加对、launch.json 配对、handler 路径写对。四个地方任意一个错,VSCode 都不会报明确错误,只会静默失败,断点不命中、日志没输出、部署卡在 CloudFormation rollback。动手前,先盯住这四点。


















