调试 Node.js
调试 Node.js
调试器
调试器是一种软件工具,用于通过分析方法观察和控制程序的执行流
- 设计目标:帮助找出 bug 的根本原因,并帮助你解决它
- 工作方式:将程序托管在自己的执行进程中或者作为附加到正在运行的程序(例如 Node.js)的独立进程运行
- 主要好处:可以监视程序运行,可以一次跟踪一个程序代码行的执行
几乎所有调试器所具有的两个最重要的功能是:
- 控制程序执行
- 观察程序的状态
调试是一个多阶段的过程,通常遵循以下步骤:
- 识别程序中的 bug
- 查找 bug 在代码中的位置
- 分析 bug 发生的原因
- 修复 bug
- 验证修复是否有效
使用 Node.js 内置调试器进行调试
在 Node.js 程序中发现错误后,你面临的第一个挑战就是在代码中找到错误所在的位置
- 使用断点,可以使程序正常运行,直到到达怀疑错误所在的关键代码部分
- 有一种通用的方法可以强制任何 JavaScript 调试器在给定的点暂停,使用
debugger
语句
function testBasket(m){ debugger; // // 设置断点 const basket = getCurrentBasket(); basket.add(m); }
调试器拥有对执行环境的完全访问权限
- 抱有恶意者可以使用它在你的 Node.js 进程中注入任意代码,必须启用一种称为检查器模式的特殊模式才能允许调试
- 使用
--inspect
选项,允许 Node.js 进程侦听调试器客户端,该调试器将自己附加到进程并控制程序执行 - 也可以使用
--inspect-brk
选项,该选项的工作方式与 --inspect 相同,但会在代码开始之前中断代码执行
在启用了检查模式的情况下启动 Node.js 后,可以使用任何兼容的调试器客户端连接到 Node.js 进程
避免将 Node.js 调试器端口绑定到
公共 IP 地址
或0.0.0.0
,否则可以能连接到 IP 地址的任何客户端都可能连接并控制 Node.js 进程
内置调试器
-
使用
node inspect
此命令行调试器与 Node.js 捆绑在一起 -
node-inspect 调试器将在启用检查模式的情况下运行 Node.js,同时启动集成的交互式调试器
-
你现在可以使用多个命令来控制程序的执行(以下从概念上来说适用于所有调试)
- cont 或 c: 继续,继续执行到下一个断点或程序末尾
- next 或 n: 执行下一行,执行当前上下文中的下一行代码
- step 或 s: 单步执行,与 next 不同之处在于如果下一行代码是函数调用,则转到此函数代码的第一行
- out 或 o: 单步跳出,如果当前执行上下文在函数的代码内,请执行该函数的其余代码,然后跳回到最初调用该函数的代码行
- restart 或 r: 重启,重启程序并在代码开始之前暂停执行
-
断点控制
setBreakpoint()
或sb()
: 在当前行上添加断点setBreakpoint(<N>)
或sb(<N>)
: 在行号 N 上添加一个断点clearBreakpoint('myscript.js', <N>)
或cb('myscript.js', <N>)
: 清除行号 N 处文件 myscript.js 中的断点
-
获取有关当前执行点的信息
list(<N>)
: 列出包含当前执行点之前和之后 N 行的源代码exec <EXPR>
: 在当前执行上下文中计算表达式
-
还可以使用 help 命令显示可用命令的完整列表
-
请按
Ctrl+D
或选择命令.exit
运用 Visual Studio Code 进行调试:官网文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了