Node.js 的调试
1 命令行调试
Node.js支持命令行下的单步调试,在当前js文件夹下打开命令窗口,执行node debug debug.js
,将会启动debug.js的调试工具。
调试下面的名为debug.js的js文件
var a = 'hello debug';
var b = 'hello world ';
var c = function(x,y){
console.log(x+y);
};
c(a,b);
在命令行窗口中输入node debug debug.js
,就打开了一个调试终端。
H:\nodejsStudyDemo\oneDay>node debug debug.js
< Debugger listening on port 5858
connecting to 127.0.0.1:5858 ... ok
break in H:\nodejsStudyDemo\oneDay\debug.js:2
0 (function (exports, require, module, __filename, __dirname) {
1
> 2 var b = 'hello world ';
3 var c = function(x,y){
4 console.log(x+y);
debug>
在这个调试终端中我们还可以用一些基本的命令进行单步跟踪调试。参见下表。
命令 | 功能 |
---|---|
run | 执行脚本,在第一行暂停 |
restart | 重新执行脚本 |
cont,c | 继续执行,直到遇到下一个断点 |
next,n | 单步执行 |
step,s | 单步执行,并进入函数 |
out,o | 从函数中步出 |
setBreakpoint(),sb() | 在当前行设置断点 |
setBreakpoint(‘f()’),sb(…) | 在函数f的第一行设置断点 |
setBreakpoint(‘debug.js’,5),sb(…) | 在debug.js的5行设置断点 |
clearBreakpoint,cb(…) | 清除所有断点 |
backtrace,bt | 显示当前调用栈 |
list(5) | 显示当前执行到的前后五行代码 |
watch(expr) | 把表达式expr加入监视列表 |
unwatch(expr) | 把表达式从监视列表移除 |
watchers | 显示监视列表中所有的表达式和值 |
repl | 在当前上下文打开及时求值环境 |
kill | 中止执行当前执行的脚本 |
scripts | 显示当前已加载的所有脚本 |
version | 显示V8版本 |
2 远程调试
V8提供的调试功能是基于TCP协议的,所以Node.js可以使用远程调试。
在命令行下使用以下两个语句可以打来调试服务器:
node --debug[=port] debug.js
node --debug-brk[=port] debug.js