主题
断点调试 nest 项目
背景
说起项目调试,我们最常使用的方式就是console.log
,但是对于服务端项目,仅仅使用 console.log 是远远不够的,况且 console.log 的功能很弱,想知道代码运行路线,想让代码在某一行断住,实时查看某个变量的值...很困难,甚至无法实现,所以会使用 debugger 调试时一名合格程序员必备的技能之一
提示
调试原生 js 文件运行可以看另一篇文章 js 代码断点调试方法
调试 nest.js 项目,由多种方式, 这里介绍两种,一种借助 chrome 的 inspect 进行调试, 一种直接在 vscode 内调试
chrome://inspect
- 在需要打断点的地方加上
degubber
关键字
ts
import { Controller, Get, ParseIntPipe, Query } from "@nestjs/common";
import { AppService } from "./app.service";
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get("getOne")
getOne(@Query("id", ParseIntPipe) id: number) {
debugger;
console.log(typeof id);
return this.appService.getPersonOne(id);
}
}
- 运行 nest 项目,带上
--debug
参数,例如npm run start:debug
bash
"start:debug": "nest start --debug --watch",
nest start 命令提供的 --debug
参数的原理就是 node --inspect
,--inspect
并不会和 --inspect-brk
一样在首行断住,所以需要在需要 debugger 关键字的帮助
nest 项目启动后的结果(重点为高亮部分):
bash
Debugger listening on ws://127.0.0.1:9229/47453ade-d66f-40a4-87fd-18d3fd15c744 // [!code warning]
For help, see: https://nodejs.org/en/docs/inspector // [!code warning]
[Nest] 11984 - 2024/07/28 21:14:31 LOG [NestFactory] Starting Nest application...
[Nest] 11984 - 2024/07/28 21:14:31 LOG [InstanceLoader] PersonModule dependencies initialized +7ms
|
这时候就说明可以在 chrome 的 devTools 内调试 nestjs 项目了
在 chrome 打开
chrome://inspect
访问相关接口
vscode 调试(推荐)
在 vscode 开发 nest 项目,当然首选在编辑器内调试,更方便
VSCode 也实现了 Debugger 的客户端。
创建
.vscode/launch.json
文件 点击调试面板的 create launch.json file,它会创建 .vscode/launch.json 的调试配置文件:修改内容 新增或者修改 configurations 内容
json
{
"type": "node",
"request": "launch",
"name": "debug nest",
"runtimeExecutable": "npm",
"args": ["run", "start:dev"],
"skipFiles": ["<node_internals>/**"],
"console": "integratedTerminal"
}
name
为 配置名称;会显示在启动配置下拉菜单中。
- 选择刚配置的
debug nest
,点击启动按钮(小三角)启动项目 - 在需要打断点的行号前面打上断点,请求接口时候,就会进入断点,然后开始调试
vscode 其他常用断点
提示
下列这些断点在用 vscode 调试 js 时后同样适用
(1)logpoint(记录点)
使用时机:只想打印日志,不想代码运行到这里被断住,又不想加 console.log 污染代码的时候使用
在 vscode 行号处右键,选择【添加记录点】
输入需要打印的变量,用{}
包裹,回车,例如这里需要打印 id:
运行结果
{}
内变量支持 es6 模板字符串,例如
(2)条件断点
使用时机:需要在某个条件成立时候才需要进入断点,一般用于在循环中断点,只有当某个条件成立时候才需要将代码逻辑断住的场景
在 vscode 行号处右键,选择【添加条件断点】,然后输入条件
例如这里我输入条件id===3
,那么只有当请求时传入的 id 为数值 3 时候才会进入断点,代码才会在这里停下来
并且,条件断点还有其他额外选项
例如:若是还加了日志消息选项,当条件满足进入断点后,还会打印日志,非常方便
(3)异常断点
可以在没有处理的异常处自动断住