使用任何一门编程语言, 都少不了代码调试这一功能. 我们在使用 JavaScript 编写浏览器端代码时, Chrome 提供了强大的调试工具 Dev Tools, 但是在编写 Node.js 代码时, 大多数人最开始都使用 console.log 来进行跟踪调试, 开发过程因此变得相当繁琐. 其实 Node.js 也提供了一些内置的调试功能, 使用这些调试功能可以大大提高开发速度, 今天就来简单介绍一下如何在 Node.js 环境使用 debug 功能.
首先, 我们创建一个 debug 目录, 在这个目录内再创建一个 index.js 文件, 如图所示:
源代码文件 index.js 内容如下:
- global.x = 5;
- function fn() {
- console.log('calling fn');
- }
- setTimeout(() => {
- console.log('world');
- debugger;
- fn();
- }, 1000);
- console.log('hello');
命令行调试界面
在使用 `node` 命令执行该文件时, 加上一个 `inspect` 参数, 即可进入命令行调试界面:
上图中是经过预处理后的代码, 可以看到, 我们的源代码被外层函数包裹起来了, 该函数的参数分别是 `exports`,`require`,`module`,`__filename`,`__dirname`, 这也是我们可以直接在 Node.js 源代码中直接使用的原因.
在上图的界面中, 我们可以执行如下命令, 来完成调试的控制流程:
next 执行下一步 简写形式: n
cont 继续执行, 直到下一个断点 简写形式: c
step 进入函数内部 简写形式: s
out 跳出当前执行函数 简写形式: o
list(n) 显示前后个 n 行的调试界面
watch(expr) 添加一个表达式到监测列表
watchers 列出监测列表中所有的表达式
unwatch(expr) 从监测列表移除指定的表达式
exec expr 执行指定的表达式
backtrace 打印出当前代码的执行栈信息 简写形式: bt
.exit 退出调试界面
图形化调试界面
图形化调试界面是利用 Chrome 的 Dev Tools 来完成的, 只需在执行程序时稍微改变一下命令行参数即可. 对于普通的 Node.js 程序, 需要使用 `--inspect-brk` 命令行参数, 该参数会在程序的第一行设置断点, 如下图所示:
然后在 Chrome 当前 Tab 页打开 Dev Tools:
然后点击左上角绿色的 Node.js 图表, 进入调试界面, 调试方法和浏览器端代码一致, 如下图所示:
调试过程中, Dev Tools 和命令行会同步输出结果:
如果我们的程序是一个 web 服务程序, 开发人员想要调试用户的请求处理流程, 那么命令行参数会稍微有所不同, 只需指定 `--inspect` 即可, 我们先添加一个 server.js 文件, 内容如下:
- let http = require('http');
- let hostname = '127.0.0.1';
- let port = 3000;
- let reqTimes = 0;
- let server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end(`reuqest times: ${++reqTimes}`);
- });
- server.listen(port, hostname, () => {
- console.log(`Server running at http://${hostname}:${port}/`);
- });
然后使用下面命令启动:
最后, 我们就可以在 Dev Tools 中打开调试界面并手动设置断点了:
参考资料:
https://nodejs.org/api/debugger.html
来源: https://www.cnblogs.com/liuhe688/p/8621624.html