Nodejs核心带有STDIO模块,这是调试应用程序的一种轻量级的方法,它对许多工作都极为合适。这个模块无需其他依赖模块,也就是说无需其他设置就可以使用它。
<一>对于下列场景来说,console.log()方法是快速而直接的方法。
(1) 检查变量或字符串的值。
(2) 记录脚本调用了一个函数。
(3) 记录来自第三方服务的响应。
如果想记录错误,可以使用console.warn(),它又名console.error(),这两个方法都会打印到标准错误流中。
function notDefine(){
try{
someFunction(); //undefined
} catch(e) {
console.error(e);
}
}
notDefine();
如果运行这段代码就会在终端上打印出如下错误:
[ReferenceError:someFunction is not defined]
<二>使用console.info()方法是找出错误为何被抛出的轻量级方法。要想探索代码的瓶颈所在或者想快速的检测代码的某些部分的性能基准,可以使用STDIO模块提供的console.time()和console.timeEnd()。这两个方法通过使用一个标签作为参数,这个参数将两个方法绑定在一起,可以很容易找出代码运行缓慢的地方或通过比较执行相同代码的两种方法来优化性能。
var sum = 0;
var arr = new Array(1000000);
for(var i = 0; i < arr.length; i++){
arr[i] = Math.random();
}
console.time('for-loop-1');
for(var i in arr){
sum += arr[i];
}
console.timeEnd('for-loop-1');
console.time('for-loop-2');
for(var i = 0; i < arr.length; i++){
sum += arr[i];
}
console.timeEnd('for-loop-2');
运行结果:
for-loop-1: 413ms;
for-loop-2: 27ms;
<三>NodeJs调试器
(1) 按步执行代码。
(2)设置断点。
(3)在脚本的断点处获取包括堆栈跟踪和已装载的脚本在内的信息。
(4)进入REPL(Read,Evaluate,Print,Loop,读取,演算,打印,循环)以便在断点处进行详细的调试。
(5)运行,重启以及停止脚本。
var foo = function(){
var a = 3, b = 5;
debugger; //断点
var bar = function(){
var b = 7, c = 11;
a += b + c;
debugger;
}
bar();
debugger;
}
foo();
运行代码: node debug app.js
* 前进到第一个断点 : cont
* 查询变量的值:repl , 输入变量,例如: a
* 退出当前断点 ctrl + c
* 退出调试模式 ctrl + d
<四>使用Node Inspector
这是NodeJs最强大的调试工具,这个第三方工具是由dannycoates(Danny Coates)所创建,要使用Node Inspector,机器上必须有WebKit浏览器(谷Chrome或者Safari)。支持如下功能。
(1)浏览应用程序的源代码
(2)使用终端来与应用程序交互
(3)添加、移除断点
(4)按步执行代码中的函数调用
(5)步入、步出函数
(6)设置观察表达式
(7)查看代码中不同点上的堆栈踪迹
(8)查看作用域变量
只要计算机上安装有WebKit浏览器,就可以从npm安装 Node Inspector:
npm install -g node-inspector
如果使用-- debug-brk,那么Node Inspector会在应用程序的第一行位置放置断点:
node --debug-brk app.js
一旦应用程序运行于调试模式,就必须另启一个Node Inspector进程,在另一个终端选项卡中,运行:
node - inspector
如果运行成功,会输出如下信息:
visit http://0.0.0.0:8080/debug?port=5858 to start debugging
使用浏览器访问上面的link,就可以对代码进行调试。