我觉得调试与其他任何开发周期一样重要。因此,揭开调试工作的神秘面纱总是一个好习惯,让它更容易,更省时,这样我们就可以按时结束工作并减轻压力。
与大多数语言一样,node 提供了一些出色的调试工具,可以轻松发现和修复代码中的缺陷。我一直提倡使用调试器,因为我个人发现使用调试器确实消除了任何猜测的需要,并且总体上使我们成为更好的开发人员。
本指南适用于已经使用 Node 的开发人员和管理员。它假定在实际水平上对语言有基本的理解。
使用调试器
Node.js 包含一个功能齐全的进程外调试实用程序,可通过简单 的基于 TCP 的协议 和内置调试客户端访问。
例如,要使用调试器调试名为 的文件,您可以简单地使用标志script.js调用 node,如下所示:debug
$ node debug script.js < debugger listening on port 5858 connecting... ok debug>
断点
现在您已经启动了一个调试会话,您调用的脚本中的任何位置都debugger 将成为调试器的断点。
因此,例如,让我们在 script.js 中添加一个调试器语句:
foo = 2; setTimeout(() => { debugger; console.log('bugger'); }, 1000); console.log('de');
现在,如果我们运行这个脚本,调试器将在我们的断点处被调用,我们可以通过使用contornext命令(c或n简称)来控制脚本控制。
我们可以通过使用随时暂停脚本执行p。
$ node debug script.js < debugger listening on port 5858 connecting... ok break in /home/tom/web/envatodebug/myscript.js:1 1 foo = 5; 2 setTimeout(() => { 3 debugger; debug> cont < de break in /home/tom/web/envatodebug/myscript.js:3 1 foo = 5; 2 setTimeout(() => { 3 debugger; 4 console.log('bugger'); 5 }, 1000); debug> next break in /home/tom/web/envatodebug/myscript.js:4 2 setTimeout(() => { 3 debugger; 4 console.log('bugger'); 5 }, 1000); 6 console.log('de'); debug> next < bugger break in /home/tom/web/envatodebug/myscript.js:5 3 debugger; 4 console.log('bugger'); 5 }, 1000); 6 console.log('de'); 7 debug> quit
REPL
$ node debug script.js < debugger listening on port 5858 connecting... ok debug> repl Press Ctrl + C to leave debug repl > foo 2 > 2+2 4
调试器的 Read-Eval-Print-Loop 允许您在执行期间以交互方式输入代码,从而在中断执行时访问应用程序及其所有变量和方法的状态。这是一个非常强大的工具,您可以使用它来快速清理您的应用程序。
通常,REPL 可作为独立的和作为调试器的一部分使用,它允许您以交互方式运行javascript 。例如,只需 node 在提示符处键入,不带任何选项,您将获得一个 REPL 接口,您可以在其中编写代码并查看输出。
进出
前面我提到了contand next( cand n) 命令,它允许我们在到达断点后继续执行代码。除此之外,当我们遍历代码时,我们还可以单步执行方法或单步执行其父作用域。
使用命令step进入和out退出,或s简称o。
回溯
使用backtrace或bt获取当前执行帧的回溯输出。
休息艺术
使用restart或从执行开始r重新启动脚本。
连接到调试器的替代方法
高级用户也可以通过使用 --debug 命令行标志启动 Node.js 来访问调试器,或者通过使用 SIGUSR1.
一旦以这种方式将进程设置为调试模式,就可以使用 Node.js 调试器连接到它,方法是使用 pid 正在运行的进程或通过 URI 引用(例如localhost:port)来连接***调试器:
node debug -p <pid> 通过 连接到进程 pid。
node debug <URI> 通过 URI 连接到进程,例如localhost:5858.
使用节点检查器
除了 CLI 调试工具,Node Inspector还在 Web 浏览器内部提供了 GUI 检查器(目前仅支持 chrome 和 Opera)。
要使用调试器,只需按如下方式安装:
npm install -g node-inspector
现在我们已经安装了 Node 检查器,我们可以使用以下命令调试我们的 script.js:
node-debug script.js
您的 shell 现在将输出以下内容,如果您在开发操作系统上将 Chrome 或 Opera 设置为默认设置,则可能会打开 Web 浏览器到该 URL。
Node Inspector is now available from https://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858 Debugging `script.js` Debugger listening on port 5858
在您的 Web 浏览器中,您现在可以在与开发人员工具包类似的环境中调试您的应用程序。设置断点和查看代码现在与您的浏览器视图集成。享受!
结论
调试不需要是一场噩梦,也不需要有压力。
- 断点
- REPL
- 进出
- 回溯
- 休息艺术
- 连接到调试器的替代方法
- 使用节点检查器