Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Node.js
Code

用Node.js调试

by
Difficulty:IntermediateLength:ShortLanguages:

Chinese (Simplified) (中文(简体)) translation by Wentao Wang (王文涛) (you can also view the original English article)

我感觉调试是开发周期中至关重要的一环。 所以,搞清楚调试任务,让它容易一些、耗时少一些,让我们准时完成工作并减少压力,总归是一种良好的实践。

和大多数其它主流语言一样,Node也提供了一些优秀的调试工具,让我们可以容易地找到和修复代码中的缺陷。 我总是不遗余力地推荐使用调试器,因为个人而言,我发现调试器真的可以消除任何黑箱猜测,并且一般来说会让我们开发者得到提升。

这个指南针对的是已经开始使用Node的开发者和管理员。 我假设这部分读者对这个语言的理解已经到了实用的程度。

使用调试器

Node.js包含了一个全功能的进程外调试工具和一个内置的调试客户端,可用一个简单的基于TCP的协议来访问。

比如,使用这个调试器调试一个名为script.js的文件,你只需要用debug标记来调用node,即:

断点

现在你启动了一个调试会话,而在脚本中任何调用了debugger的位置就将成为调试器的一个断点。

让我们可script.js中添加一个调试语句:

现在,如果我们执行此脚本,则调试器会调用我们的断点,然后,我们可以用过contnext命令 (缩写为cn)来控制脚本运行。

我们可以在任何时候通过p来暂停脚本的执行。

REPL

调试器的读取-执行-打印-循环 (REPL) 让你可以在执行过程中交互式地输入代码,因而可访问到应用程序的状态,中断处所有的变量和方法。 这是一种很强大的工具,让你可以快速地改良你的代码。

一般而言,REPL是调试器的一部分,但它也独立存在的,你可以交互式地用它来执行JavaScript代码。 比如,在命令行中不带任何选项地执行node,你就会得到一个REPL界面,然后你可以在它里面写代码并看到输出。

步入和步出

前面我提到了contnext命令 (cn),它们可用于到达断点后代码的继续执行。 除此之外,在我们遍历代码时,我们也可以步入一个方法,或步出到它的父作用域中。

使用step来步入,使用out来步出,或用简写so代替。

反射追踪

使用backtracebt来打印当前执行帧的反向追踪输出。

重启

使用restartr来重启脚本,让它从头开始执行。

控制调试器的其它方式

高级用户也可用--debug命令行参数启动Node.js来访问调试器,或者向已经运行的Node.js进程发送一个SIGUSR1信号。

一旦一个进程用这种方法进入了调试模式,我们可以用Node.js调试器来连接它,访问监听状态的调试器的方式可以是运行进程的pid,也可以是URL地址 (比如localhost:port)

  • node debug -p <pid>是通过pid来访问进程。
  • node debug <URL>是用过URL来连接进程,比如localhost:5858

使用Node Inspector

除了命令行 (CLI) 调试工具,Node Inspector也提供了网页浏览器内部的GUI调试器。

为使用这种调试器,只需要用如下方式安装:

npm install -g node-inspector

现在,你已经安装了Node Inspector,我们可用如下方式调试script.js:

node-debug script.js

你的命令行会输出如下信息,如果你的Chrome或Opera浏览器是你操作系统上的默认浏览器,则同时也会用浏览器打开一个相应的URL地址。

在你的网页浏览器中,你将可以在和开发者工具包类似的环境中调试你的应用程序。 设置断点和查看代码在你的浏览器视图中集成起来了。 尽情享受吧!

结论

调试并不一定是一个噩梦,也不一定充满压力。

设置断点和逐步执行代码在Node也能如此简单。 这和Ruby有着相同的使用体验。如果你想理解某个应用程序,用调试模式打开并暂停执行酷炫极了,可让你以极快的速度学习。

关注我们的公众号
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.