NestJS 调试方案

本文档介绍两种常用的 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. 启动调试

  1. 在 VS Code 中按 F5 或点击调试面板的启动按钮
  2. 在代码中设置断点(点击行号左侧)
  3. 发送请求触发断点

使用场景

  • ✅ 本地开发环境调试
  • ✅ 需要完整的 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 调试器

  1. 打开 Chrome 浏览器
  2. 打开开发者工具(F12Ctrl+Shift+I / Cmd+Option+I
  3. 点击 Node 图标 (通常在开发者工具顶部,只有 Node.js 调试时才会显示)
  4. 进入 Node.js 调试界面

4. 设置断点

  1. 在 Sources 面板中,点击右上角的三个点图标
  2. 选择启用 Node 选项
  3. 展开文件系统树状结构,找到对应的源码文件
  4. 点击行号左侧设置断点

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 文件:

  1. 修改 main.ts 文件
  2. 使用 Command+S(Mac)或 Ctrl+S(Windows/Linux)手动保存文件
  3. 保存操作会触发断点生效

使用场景

  • ✅ 线上环境问题调试
  • ✅ 本地无法复现的问题
  • ✅ 需要轻量级调试方案
  • ✅ 远程服务器调试

发送测试请求

可以使用以下工具发送非 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 中,可以设置条件断点,只有当条件满足时才会暂停:

  1. 右键点击断点
  2. 选择 "编辑断点"
  3. 输入条件表达式

3. 日志断点

在 VS Code 中,可以设置日志断点,在不暂停程序的情况下输出日志:

  1. 右键点击断点位置
  2. 选择 "添加日志断点"
  3. 输入要输出的表达式

4. 远程调试配置

如果需要调试远程服务器上的应用,可以通过 SSH 端口转发:

bash 复制代码
ssh -L 9229:localhost:9229 user@remote-server

然后在本地 Chrome 中连接到 localhost:9229


📝 注意事项

  1. 性能影响:调试模式会影响应用性能,生产环境请勿启用调试

  2. 安全考虑:远程调试会暴露调试端口,确保只在安全网络环境中使用

  3. 端口冲突 :如果 9229 端口被占用,可以通过环境变量修改调试端口:

    bash 复制代码
    NODE_OPTIONS="--inspect=0.0.0.0:9230" npm run start:debug

相关推荐
大橘喵喵重2 小时前
FastAPI 实现国际化(i18n)和多语言支持的完整方案
后端
少莫千华2 小时前
【Web API】RESTful API接口规范
前端·后端·json·api·restful·rest
用户2345267009822 小时前
AI会不会悄悄把漏洞甚至后门写进你的代码里
后端·ai编程
嘻哈baby2 小时前
rsync文件同步:从备份到迁移的瑞士军刀
后端
Java水解2 小时前
Spring Boot Starter自定义开发 构建企业级组件库
spring boot·后端
用户617433273102 小时前
访问Windows共享目录
后端
掘金酱2 小时前
2025年度稀土掘金影响力榜单发布!
前端·人工智能·后端
程序员侠客行2 小时前
Mybatis二级缓存实现详解
java·数据库·后端·架构·mybatis
源码获取_wx:Fegn08952 小时前
基于springboot + vue健康茶饮销售管理系统
java·vue.js·spring boot·后端·spring