首先写一个简单的程序,test.js:
var a = 1;
var b = 'world';
var c = function(x){
console.log('hello'+x+a);
};
c(b)
方法一、命令行下的单步调试
在命令行下执行node debug test.js将会启动调试工具
以下是一些基本的命令进行单步跟踪调试:
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(...)清除所有断点
breaktrace,bt显示当前的调用栈
list(5) 显示当前执行到的前后5行代码
watch(expr)把表达式expr加入监事列表
unwatche(expr)把表达式expr从监事列表移除
watchers 显示监视列表中所有的表达式和值
repl 在当前上下文打开即时求值环境
kill 终止当前执行的脚本
scripts 显示当前已加载的所有脚本
version 显示V8的版本
方法二、远程调试
V8提供的调试功能是基于TCP协议的,因此Node.js可以轻松地实现远程调试。在命令行下使用以下两个语句之一可以打开调试服务器:
node --debug[port] XXX.js 可以启动调试服务器, 默认情况下调试端口是5858
node --debug-brk[port] XXX.js默认端口1234
node -debug和node -debug -brk区别:前者运行脚本时,脚本会正常执行但不会暂停,在执行过程中调试客户端可以连接到调试服务器。如果要执行脚本暂停执行等待客户端连接,则应该使用后者。这时调试服务器在启动后会立刻暂停执行脚本,等待调试客户端连接。
当调试服务器启动以后,可以用命令行调试工具作为调试客户端连接,例如:
cmd进入到存放test.js的目录,在一个终端中运行node --debug-brk debug.js
在另外一个终端中运行node debug 127.0.0.1:5858
实际上,当使用node debug test.js名调试时,只不过将以上两个步骤工作自动完成了而已。
方法三:使用node-inspector调试Node.js
(1)使用npm install -g node-inspector命令安装node--inspector
(2)然后在终端通过node --debug-brk=5858 test.js命令连接你要除错的脚本的调试服务器,再启动node-inspector
(3)在浏览器中打开http://127.0.0.1:8080/debug?port=5858