全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 20 道配套习题

NodeJS调试与工具链专题

专题说明

本专题聚焦Node.js开发过程中的调试技术、性能分析、单元测试和开发工具链使用。掌握这些技能可以快速定位问题、保障代码质量、提升开发效率。

学习目标

  1. 掌握Node.js多种调试方式(Chrome DevTools、CLI调试器、VS Code调试)
  2. 学会使用性能分析工具(Clinic.js)诊断CPU、内存、事件循环问题
  3. 理解单元测试框架(Jest/Mocha)的使用和异步测试技巧
  4. 掌握ESLint代码风格检查和Nodemon开发热重载配置

学习内容

专题涵盖以下核心知识点:

  • Node.js调试基础:inspect模式启动、断点设置、调试器连接
  • Chrome DevTools调试:Sources面板、调用栈查看、变量监视
  • CLI调试器:内置调试命令、单步执行、断点管理
  • 日志与错误处理:console调试技巧、Error对象结构、错误捕获
  • 单元测试框架:Jest断言、异步测试、Mock与Spy
  • 性能分析工具:Clinic.js工具集、火焰图分析、事件循环诊断
  • ESLint与Nodemon:代码规范检查、自动重启配置、开发流程集成

学习建议

  1. 先从调试基础入手,理解Node.js调试模式的工作原理
  2. 实践Chrome DevTools调试,掌握断点、单步执行、变量查看
  3. 学习性能分析工具,结合实际项目进行性能诊断
  4. 配置ESLint和Nodemon,建立完整的开发工具链
  5. 完成专题题目练习,巩固理论知识与实践技能

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

node --inspect-brk app.jsnode --inspect app.js的区别是:前者会在脚本第一行自动暂停,而后者会立即执行脚本。

A

B

2

Jest的jest.fn()创建的mock函数可以记录被调用的次数、参数和返回值,用于验证函数的行为和隔离测试。

A

B

单选题
3

以下哪种方式可以正确捕获async函数中的错误?

A

try { asyncFunc(); } catch(e) {}

B

asyncFunc().catch(e => {})

C

try { await asyncFunc(); } catch(e) {}

D

catch(asyncFunc()) { e => {} }

4

在开发环境中,需要将Node.js调试端口设置为自定义端口8888,同时通过环境变量配置调试模式,以下哪种方式正确?

A

DEBUG_PORT=8888 node app.js

B

node --inspect=8888 app.js

C

NODE_DEBUG=8888 node app.js

D

node --inspect --port=8888 app.js

5

在Node.js项目中使用dotenv管理环境变量,以下哪个是正确的使用方式?

A

const env = require('dotenv').parse()

B

require('dotenv').config()

C

import { load } from 'dotenv'

D

dotenv.load()

6

启动Node.js调试模式后,在Chrome浏览器中打开哪个URL可以访问调试界面?

A

chrome://inspect

B

chrome://debug

C

devtools://localhost:9229

D

chrome://devtools

7

在Node.js中,如何以调试模式启动一个脚本?

A

node run app.js --debug

B

node --inspect app.js

C

node debug app.js

D

node --debugger app.js

8

Node.js使用--inspect启动后,Chrome DevTools是如何连接到Node.js进程的?

A

通过HTTP请求访问Node.js的REST API

B

通过WebSocket建立双向通信通道

C

通过共享内存进行数据交换

D

通过Unix域套接字进行通信

9

使用Node.js内置CLI调试器时,哪个命令用于设置断点?

A

break

B

setBreakpoint

C

sb

D

bp

10

使用Clinic.js的clinic flame生成的火焰图主要用于分析什么问题?

A

内存泄漏问题

B

CPU密集型操作和热点函数

C

事件循环延迟

D

网络请求延迟

11

Clinic.js是一个Node.js性能诊断工具集,以下哪个工具专门用于检测事件循环阻塞问题?

A

clinic doctor

B

clinic bubbleprof

C

clinic flame

D

clinic heapprofiler

12

在Jest中,使用哪个断言方法来验证值是否严格等于预期值?

A

expect(value).toBe(expected)

B

expect(value).toEqual(expected)

C

expect(value).toStrictEquals(expected)

D

expect(value).equals(expected)

多选题
13

使用Chrome DevTools调试Node.js时,可以进行哪些调试操作?

A

设置断点并单步执行代码

B

查看调用栈和变量状态

C

动态修改源代码并热更新

D

监控CPU和内存使用情况

E

实时修改process.env环境变量

14

关于Node.js中的Error对象,以下哪些说法正确?

A

Error对象包含message属性存储错误信息

B

Error对象包含stack属性存储调用栈信息

C

Error.captureStackTrace可以自定义堆栈跟踪起点

D

Error对象有code属性存储系统错误代码

E

所有Error对象都自动包含cause属性记录原始错误

15

使用Node.js CLI调试器调试时,以下哪些命令可以控制程序执行流程?

A

cont - 继续执行直到下一个断点

B

next - 执行下一行代码,不进入函数

C

step - 执行下一行代码,进入函数内部

D

pause - 立即暂停正在执行的代码

E

restart - 重新启动调试会话

填空题
16

在Jest中测试异步代码,有三种方式:

  1. 使用____________参数的回调形式
  2. 返回____________对象
  3. 使用____________语法
17

使用console测量代码执行时间,需要先调用____________('timer')开始计时,然后执行需要测量的代码,最后调用____________('timer')输出耗时。两个方法的____________参数必须完全相同才能正确匹配。

18

在Node.js CLI调试器中,可以使用____________命令进入交互式环境,在其中可以执行任意JavaScript表达式。在调试器中查看变量user的值,可以输入____________直接显示,或者使用____________命令执行。

19

ESLint可以通过创建____________文件来排除不需要检查的文件和目录,其语法与____________文件相同。也可以在配置文件中使用____________字段配置忽略规则。

20

在nodemon运行过程中,可以输入____________命令手动触发重启。如果需要暂停nodemon的监控功能但不停止应用,可以使用____________参数启动,或者在运行时按____________停止nodemon。

参考答案
1.正确 2.正确 3.C 4.B 5.B 6.A 7.B 8.B 9.C 10.B 11.A 12.A 13.A;B;C;D 14.A;B;C;D 15.A;B;C;E 16.done;Promise;async/await 17.console.time;console.timeEnd;标签 18.repl;user;exec 19..eslintignore;.gitignore;ignorePatterns 20.rs;--no-watch;Ctrl+C
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 NodeJS环境搭建与运行
下一个专题 → NodeJS运行时原理专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码