调试nodejs程序

1先来一段测试代码
var http  = require('http');

function onRequest(req,res){
	var content = "hello, debug test";
	var conLength = content.lenggth;
	res.writeHead(200,{
		'content-length': conLength,
		'content-type': 'text/plain'
	});
	res.end(content);
}
http.createServer(onRequest).listen(8080);

保存为debug_server.js

2 debug用到的几个关键命令
■ cont —继续.
■ next —跳到下一条执行语句.
■ step —跳转入下一条语句中,否则的话跳过执行
■ out —从当前执行函数中跳出
■ backtrace —显示当前调用执行堆栈
■ repl —启动Nodejs REPL,可以查看变量值或执行代码
■ watch(expr) —将表达式加入监控列表
■ list( n ) —列出当前执行代码的前/后n行
3 调试
命令:node debug debug_server.js
输出:
< debugger listening on port 5858
connecting... ok
break in C:\Users\xxx\node\debug_server.js:1
  1 var http  = require('http');
  2
  3 function onRequest(req,res){
我们怀疑第5行有问题
debug> list(5)
  1 var http  = require('http');
  2
  3 function onRequest(req,res){
  4     var content = "hello, debug test";
  5     var conLength = content.lenggth;
  6     res.writeHead(200,{
debug> setBreakpoint(5)
  1 var http  = require('http');
  2
  3 function onRequest(req,res){
  4     var content = "hello, debug test";
* 5     var conLength = content.lenggth;
  6     res.writeHead(200,{ 
在第5行设置断点,*表示断点所在位置
在另外一个命令窗口发出请求curl –i http://localhost:8080
你会发现两点:
(1)请求curl命令没有反应
(2)在node debug session下面输出:
break in C:\Users\xxx\node\debug_server.js:5
  3 function onRequest(req,res){
  4     var content = "hello, debug test";
* 5     var conLength = content.lenggth;
  6     res.writeHead(200,{
  7             'content-length': conLength,
我们跳过这一行
debug> next
break in C:\Users\xxx\node\debug_server.js:7
* 5     var conLength = content.lenggth;
  6     res.writeHead(200,{
  7             'content-length': conLength,
  8             'content-type': 'text/plain'
  9     });
现在启动node repl来查看当前变量的值
debug> repl
Press Ctrl + C to leave debug repl
> content
'hello, debug test'
> conLength

我们发现content的值跟预想的一样,但是conLength的值却没有,这就是问题所在了。
4 其他调试方式
当然了我们还可以在代码中插入类似console.log(变量名)的方法来打印变量的值进行调试

猜你喜欢

转载自jobar.iteye.com/blog/2085959