本文转载自:众成翻译
译者: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
输出的效果会像这样:
Node.js内置的调试器
Node.js包含了一个全功能的可以通过TCP协议或是内置调试客户端访问的进程外调试工具。
要启动内置的调试器你需要像下面这样启动应用:
node debug app.js
在你启动应用之后,你会看到类似下面的内容:
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应用不是很棒吗?
好消息是,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应用变得更安全。
如果你有任何问题或建议,请在下面的留言区中说明。