本文档介绍两种常用的 NestJS 应用调试方案:VS Code 调试和 Chrome 调试,帮助开发者根据不同的场景选择最合适的调试方式。
📋 目录
- [VS Code 调试配置](#VS Code 调试配置 "#vs-code-%E8%B0%83%E8%AF%95%E9%85%8D%E7%BD%AE")
- [Chrome 调试配置](#Chrome 调试配置 "#chrome-%E8%B0%83%E8%AF%95%E9%85%8D%E7%BD%AE")
- 方案对比
- 常见问题
🔧 VS Code 调试配置
VS Code 调试是本地开发环境中最常用的调试方式,配置简单,功能强大。
配置步骤
1. 创建 launch.json
在项目根目录的 .vscode 文件夹中创建 launch.json 文件(如果不存在该文件夹,需要先创建,也可以通过调试里面的按钮自动创建)。

2. 配置 launch.json
删除 VS Code 自动生成的默认配置,快捷生成 npm node 启动配置项,并且修改相关的 configurations:

json
{
// 使用 IntelliSense 了解相关属性
// 悬停以查看现有属性的描述
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch via NPM",
"request": "launch",
"runtimeArgs": ["run-script", "start:debug"],
"runtimeExecutable": "npm",
"runtimeVersion": "22.17.1", // 配置当前 Node 版本
"internalConsoleOptions": "neverOpen", // 不通过内置的 Node 版本
"skipFiles": ["<node_internals>/**"],
"type": "node"
}
]
}
3. 配置说明
- name: 调试配置的名称,显示在调试面板中
- runtimeExecutable: 使用 npm 作为运行时执行器
- runtimeArgs : 传递给 npm 的参数,
start:debug对应 package.json 中的脚本命令 - runtimeVersion: 指定 Node.js 版本(根据你的实际版本修改)
- internalConsoleOptions : 设置为
neverOpen避免使用内置控制台 - skipFiles: 跳过 Node.js 内部文件,专注于应用代码
4. 启动调试
- 在 VS Code 中按
F5或点击调试面板的启动按钮 - 在代码中设置断点(点击行号左侧)
- 发送请求触发断点
使用场景
- ✅ 本地开发环境调试
- ✅ 需要完整的 IDE 集成体验
- ✅ 需要查看变量、调用栈等详细信息
🌐 Chrome 调试配置
Chrome 调试是解决线上环境问题的关键手段,特别适用于本地环境无法复现的服务器端问题。
为什么需要 Chrome 调试
- 核心场景:代码部署到服务器后出现问题,本地环境无法复现(如数据库连接、环境变量等线上特定问题)
- 传统局限:VS Code 调试仅适用于本地开发环境,无法解决线上环境特有的问题
- 补充价值:提供了一种无需复杂 IDE 配置即可远程调试 Node.js 应用的轻量方案
基础调试流程
1. 启动调试进程
在终端使用 start:debug 命令启动 NestJS 调试进程:
2. 确认调试状态
成功启动后,终端会显示类似以下信息:
bash
Debugger listening on ws://127.0.0.1:9229/...
For help, see: https://nodejs.org/en/docs/inspector
3. 连接 Chrome 调试器
- 打开 Chrome 浏览器
- 打开开发者工具(
F12或Ctrl+Shift+I/Cmd+Option+I) - 点击 Node 图标 (通常在开发者工具顶部,只有 Node.js 调试时才会显示)

- 进入 Node.js 调试界面

4. 设置断点
- 在 Sources 面板中,点击右上角的三个点图标
- 选择启用 Node 选项
- 展开文件系统树状结构,找到对应的源码文件
- 点击行号左侧设置断点
5. 触发断点
发送 HTTP 请求(GET、POST、PUT、DELETE 等)到对应的接口,程序会在断点处暂停。
功能与局限
✅ 支持的功能
- 调试接口和服务代码
- 设置变量监视
- 单步运行(Step Over、Step Into、Step Out)
- 查看调用栈
- 支持所有 HTTP 方法(GET、POST、PUT、DELETE 等)
⚠️ 主要局限
- main.ts 调试限制 :默认无法直接调试
main.ts文件,需要通过额外保存操作触发断点
解决 main.ts 调试问题
如果需要调试 main.ts 文件:
- 修改
main.ts文件 - 使用
Command+S(Mac)或Ctrl+S(Windows/Linux)手动保存文件 - 保存操作会触发断点生效
使用场景
- ✅ 线上环境问题调试
- ✅ 本地无法复现的问题
- ✅ 需要轻量级调试方案
- ✅ 远程服务器调试
发送测试请求
可以使用以下工具发送非 GET 请求来测试断点:
- Postman: 功能强大的 API 测试工具
- APIFox: 类似 Postman 的 API 工具
- 浏览器插件: 如 REST Client 等
- curl: 命令行工具
📊 方案对比
| 特性 | VS Code 调试 | Chrome 调试 |
|---|---|---|
| 适用环境 | 本地开发 | 本地/远程服务器 |
| 配置复杂度 | 中等 | 简单 |
| IDE 集成 | ✅ 完整集成 | ❌ 无集成 |
| 远程调试 | ❌ 不支持 | ✅ 支持 |
| 断点设置 | ✅ 直接点击 | ✅ 浏览器中设置 |
| 变量查看 | ✅ 完整支持 | ✅ 支持 |
| main.ts 调试 | ✅ 无限制 | ⚠️ 需手动保存 |
| 适用场景 | 日常开发 | 线上问题排查 |
🔗 相关资源
💡 调试技巧
1. 使用 debugger 语句
在代码中直接使用 debugger 语句,程序会在该处自动暂停:
typescript
export class UserService {
findAll() {
debugger; // 程序会在此处暂停
return this.users;
}
}
2. 条件断点
在 VS Code 中,可以设置条件断点,只有当条件满足时才会暂停:
- 右键点击断点
- 选择 "编辑断点"
- 输入条件表达式
3. 日志断点
在 VS Code 中,可以设置日志断点,在不暂停程序的情况下输出日志:
- 右键点击断点位置
- 选择 "添加日志断点"
- 输入要输出的表达式
4. 远程调试配置
如果需要调试远程服务器上的应用,可以通过 SSH 端口转发:
bash
ssh -L 9229:localhost:9229 user@remote-server
然后在本地 Chrome 中连接到 localhost:9229。
📝 注意事项
-
性能影响:调试模式会影响应用性能,生产环境请勿启用调试
-
安全考虑:远程调试会暴露调试端口,确保只在安全网络环境中使用
-
端口冲突 :如果 9229 端口被占用,可以通过环境变量修改调试端口:
bashNODE_OPTIONS="--inspect=0.0.0.0:9230" npm run start:debug