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(变量名)的方法来打印变量的值进行调试