supervisor

node.js 的 supervisor 插件可以帮我们监控文件的改动, 自动重启服务器, 这个 supervisor 是 node.js 的一个包 (而不是 python 的那个 supervisor, 别弄混了), 安装起来很简单, 使用 npm 的安装命令就可以, 因为我们需要在控制台运行, 所以需要安装在全局环境中.

npm install -g supervisor



然后就可以使用 supervisor 启动脚本了:

supervisor sss.js

Running node-supervisor with
  program 'sss.js'
  --watch '.'
  --extensions 'node,js'
  --exec 'node'

Starting child process with 'node sss.js'
Watching directory 'C:\Users\chaoqun.zhu\Desktop\testjs' for changes.
Press rs for restarting the process.
http://127.0.0.1:5586
crashing child
Starting child process with 'node sss.js'
http://127.0.0.1:5586
crashing child
Starting child process with 'node sss.js'
http://127.0.0.1:5586
crashing child
Starting child process with 'node sss.js'
http://127.0.0.1:5586


node debug

node.js 提供了一个内建调试器来帮助开发者调试应用程序. 想要开启调试器我们需要在代码中加入 debugger 标签, 当 node.js 执行到 debugger 标签时会自动暂停 (debugger 标签相当于在代码中开启一个断点).

执行命令:node debug xxx.js 就可以进入调试模式.

以调试模式运行 js 时, 程序会直接断在入口处 (类似 OD 附加程序时), 你可以 cont 一下让程序继续跑起来, 就像 GDB 一样, 可以用 help 命令查看自己都可以使用哪些调试命令.

当程序中断时, 可使使用 repl 进入程序上下文, 此状态下可以即时求值, 和 Chrome 的 Debug 的 Console 是一样的.

命令 功能
run 执行脚本, 在入口处会暂停
restart 重新执行脚本
cont, c 继续执行, 直到遇到下一个断点
next, n 单步执行
step, s 单步执行并步入函数
out, o 从函数中步出
setBreakpoint(), sb() 当前行设置断点
setBreakpoint('f()'), sb(...) 在函数f的第一行设置断点
setBreakpoint('script.js', 20), sb(...) 在 script.js 的第 20 行设置断点
clearBreakpoint, cb(...) 清除所有断点
backtrace, bt 显示当前的调用栈
list(5) 显示当前执行到的前后5行代码
watch(expr) 把表达式 expr 加入监视列表
unwatch(expr) 把表达式 expr 从监视列表移除
watchers 显示监视列表中所有的表达式和值
repl 在当前上下文打开即时求值环境
kill 终止当前执行的脚本
scripts 显示当前已加载的所有脚本
version 显示 v8 版本

node-inspector

大部分 node.js 应用都是 web 应用, 所以一些基于 Chrome 的在线调试工具应运而生, 最出名的应该就是 node-inspector 了, 这是一个 node.js 的模块, 安装、使用相当的方便, 首先使用 npm 把其安装在全局环境中.

npm install -g node-inspector



node-inspector 是通过 websocket 方式来转向 debug 输入输出的, 因此, 我们在调试前要先启动 node-inspector 来监听 node.js 的 debug 调试端口, 默认情况下 node-inspector 的端口是 8080, 可以通过参数 --web-port=[port] 来设置端口.

node-inspector --web-port=8888



在启动 node-inpspector 之后, 我们可以通过 --debug--debug-brk 来启动 node.js 程序.

node --debug-brk xxx.js



控制台会返回 "debugger listening on port 5858", 现在打开浏览嚣, 访问 http://localhost:8888/debug?port=5858, 这时候就会打开一个很像 Chrome 内置调试工具的界面, 并且代码断点在第一行, 下面就可以使用这个来调试了.

如果你使用 Sublime 作为开发工具的话, 可以安装个 NodeJsDebug 插件;

安装完以后,打开 nodejs_debug.sublime-settings 文件, 将 chrome-path 修改成自己电脑上的 Chrome 目录;

然后 click item 'Nodejs Debug' on contextmenu 插件就会代替你依次执行启动 node-inspector、启动要调试的 js、用 Chrome 打开调试的 Web 页面三个步骤.

使用 Eclipse 调试

Eclipse 提供了一个 node.js 的调试插件, 不过我基本不用 Eclipse, 所以这里仅记录下.