调试 Node.js 应用

3,482 阅读4分钟
原文链接: www.spotty.com.cn

本文转载自:众成翻译
译者:loveky
链接:www.zcfy.cc/article/729
原文:blog.risingstack.com/node-hero-n…

本文是一个名为Node英雄系列教程中的第十篇 —— 在这些教程中,你会学习到如何使用Node.js并使用它开发软件产品。

在本文中,你将会学习如何通过debug模块,内置的Node调试器以及Chrome的开发者工具调试Node.js应用。

即将到来的和往期章节:

漏洞,调试

术语漏洞调试在过去几十年中都是工程学中的行话。第一次书面提到漏洞这个概念是在下面这段话中:

It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that "Bugs" — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached.

Thomas Edison

大量使用console.log语句是调试Node.js应用时最常见的手段。

"Console.log在调试小代码片段时够用了,但我们推荐你使用更好的替代方案!" @RisingStack #nodejs

让我们来看看吧!

debug模块

debug模块是那些最常被require到项目中的众多模块中的一个。使用该模块,你可以让第三方模块向标准输出stdout打印日志。要想知道某个模块是否使用了它,你可以查看该模块的package.json文件中的依赖声明部分。

为了使用debug模块,在启动应用时你需要设置DEBUG环境变量。你可以使用通配符*匹配名称。下面的代码会把所有和express相关的日志打印到标准输出。

DEBUG=express* node app.js

输出的效果会像这样:

Logfile made with the Node debug module

Node.js内置的调试器

Node.js包含了一个全功能的可以通过TCP协议或是内置调试客户端访问的进程外调试工具。

要启动内置的调试器你需要像下面这样启动应用:

node debug app.js

在你启动应用之后,你会看到类似下面的内容:

using the built-in node.js debugger

Node调试器的基本用法

在这个界面中浏览信息, 你可以使用下面这些命令:

  • c => 继续执行代码

  • n => 执行当前行并进入下一行

  • s => 跳进函数内部

  • o => 执行函数并跳至外层代码

  • repl => 在当前代码所处的上下文中执行代码

你可以通过在代码中加入debugger语句的方式来增加断点。

function add (a, b) {
  debugger
  return a + b
}

var res = add('apple', 4)
观察器

在调试过程中你可以观察表达式或是变量的值。在每一个断点处,每个观察器列表中的表达式都会在当前上下文中求值并且其结果会输出在当前断点对应代码的上方。

要使用观察器,你需要声明所有你想要观察的表达式。你可以像下面这样操作:

watch('expression')

输入watchers可以得到当前所有活跃的观察器列表,要停止观察某个表达式你需要unwatch('expression')

提示: 你可以通过向一个运行中的Node.js进程发送SIGUSR1信号来把它切换到调试模式。之后你可以通过node debug -p来连接到调试器。

"你可以通过向一个运行中的Node.js进程发送SIGUSR1信号来把它切换到调试模式。" via @RisingStack

要想了解内置调试器的全部功能,请参考官方文档:nodejs.org/api/debugge…

Chrome的调试器

当你开始调试复杂应用的时候,可视化的工具可能会有所帮助。使用你很熟悉的Chrome开发者工具来调试Node.js应用不是很棒吗?

node.js chrome developer tools debugging

好消息是,Chrome调试协议已经被移植到Node.js模块中并可以用来调试Node.js应用了。

要使用它,你需要先安装node-inspector

npm install -g node-inspector

安装完成之后,你就可以通过像下面这样的方式启动它来开始调试了:

node-debug index.js --debug-brk

(--debug-brk参数会在程序第一行处进入断点)

这会打开Chrome开发者工具然后你就可以使用它调试你的Node.js应用啦。

接下来

调试其实没有那么复杂,不是吗?

在Node Hero的下一章中,你讲学习如何使你的Node.js应用变得更安全。

如果你有任何问题或建议,请在下面的留言区中说明。