Fastify断点不触发的根本原因是V8 Inspector未启用,必须显式添加--inspect=0.0.0.0:9229启动参数并配置VSCode的attach模式、匹配端口、正确sourceMaps与outFiles路径。

VSCode 调试 Fastify 项目必须显式启用 V8 Inspector,否则断点完全静默失效——这不是配置问题,而是调试通道根本没建立。
为什么 Fastify 断点不触发?
Fastify 本身不带调试支持,Node.js 的 --inspect 必须由你手动加在启动命令里。常见现象是:断点打了、绿色圆点显示正常、但程序照跑不暂停,控制台也无报错。本质是 VSCode 没连上任何调试器进程。
-
node --inspect=0.0.0.0:9229 src/index.ts才有效;只写--inspect会绑定localhost,在 WSL/Docker 下 VSCode 连不上 - 若用
fastify startCLI,必须同时加-w(watch)和--inspect=0.0.0.0:9229,否则热重载时调试端口会被关闭 - TypeScript 项目用
ts-node启动时,要加-r ts-node/register/transpile-only,否则源码映射失败
launch.json 应该选 launch 还是 attach?
对 Fastify 这类快速启动、可能 fork 子进程的 Web 框架,request: "attach" 是更稳的选择。launch 模式容易因启动时序或环境变量差异错过断点,尤其配合 nodemon 或 ts-node-dev 时。
- 终端先执行:
node --inspect-brk=0.0.0.0:9229 -r ts-node/register/transpile-only src/index.ts -
launch.json中设"type": "node"、"request": "attach"、"port": 9229,端口必须和启动命令一致 - 加
"restart": true,进程重启后 VSCode 自动重连(适用于热重载场景) -
"address": "localhost"就够用,不用改127.0.0.1或0.0.0.0—— 这是 VSCode 连接地址,不是 Node 绑定地址
sourceMap 映射总失败?检查这三个地方
断点打在 .ts 文件却停在 .js 上,或直接跳过,基本是 sourceMap 路径没对上。Fastify 项目常用两种编译路径,配置方式不同。
- 用
tsc先编译:确认tsconfig.json中"outDir": "./dist",然后launch.json里"outFiles": ["${workspaceFolder}/dist/**/*.js"] - 用
ts-node直接运行:确保tsconfig.json含"sourceMap": true或"inlineSourceMap": true,且没被ts-node的transpile-only模式覆盖 - Windows 下路径别用反斜杠:
"outFiles": ["${workspaceFolder}\dist\**\*.js"]会被忽略,一律用正斜杠
最容易被忽略的是:--inspect 参数必须出现在启动命令最前面,且不能被 npm script 包裹层吞掉。比如 npm run dev 里如果没透传 --inspect,VSCode 就连不到任何东西——这比配置写错还难排查。


















