Carl
  • 3.5k

使用nodejs自带debug工具调试nodejs

1 示例代码

app.js

var express = require('express');
var app = express();

var req_times = 0;

app.all('/*', function(req, res){

    req_times++;

    var req_url = req.url;

    var req_method = req.method;

    var req_query = req.query;

    res.end('debugger test');
});

app.listen(3000);
console.log('app running on port 3000...');

2 插入断点

方法:在需要设置断点的地方插入debugger关键字,程序会在这里暂停运行。

app.all('/*', function(req, res){
    
    
    debugger;
    
    req_times++;
    
    debugger;
    
    var req_url = req.url;
    
    debugger;
    
    var req_method = req.method;
    
    debugger;
    
    var req_query = req.query;
    
    debugger;
    
    res.end('debugger test');
});

3 开启debugger 命令模式

node debug app.js

PS O:\DEMO\leran-nodejs-debugger> node debug app.js
< Debugger listening on port 5858
connecting to 127.0.0.1:5858 ... ok
break in O:\DEMO\leran-nodejs-debugger\app.js:1
> 1 var express = require('express');
  2 var app = express();
  3
debug>

4 debug模式下常用命令

4.1 步骤跳跃相关命令

  • cont ,c 继续执行

  • next , n 跳到下一个断点处

  • step , s 进入某个函数

  • out , o 跳出某个函数

  • pause 暂停执行某个函数

  • setBreakpoint(), sb() 再当前行设置断点

  • setBreakpoint(line), sb(line) 在指定行设置断点

  • clearBreakpoint('script.js', 1), cb(...) 清除某行的断点

4.2 信息查看相关命令

  • backtrace, bt 打印当前执行记录

  • list(5) 打印当前执行代码的前后5行

  • watch('expr') 增加一个表达式到观察列表

  • unwatch('expr') 删除一个表达式

  • watchers 列出所有观察列表,表达式和值

  • repl 进入repl环境

  • exec expr 执行一个表达式在断点的上下文

4.3 执行控制

  • run 运行脚本,在debug的开始出

  • restart 重新运行脚本

  • kill 关闭脚本

4.4 其他方面

  • scripts 列出所有已经加载的脚本

  • version 查看v8的版本号

5 命令演示

查看变量值需要进入==repl==环境。只需要在命令模式输入repl,按回车便可以进入repl环境。

debug> repl
Press Ctrl + C to leave debug repl
> req_times
0
debug> n
break in O:\DEMO\leran-nodejs-debugger\app.js:12
 10     req_times++;
 11
>12     debugger;
 13
 14     var req_url = req.url;
debug> repl
Press Ctrl + C to leave debug repl
> req_times
1
> req.method
'GET'
> req.url
'/'
debug> bt
#0 app.js:12:5
#1 layer.js:95:5
#2 route.js:131:13
#3 route.js:125:14
#4 route.js:125:14
#5 route.js:125:14
#6 route.js:125:14
#7 route.js:112:3
#8 layer.js:95:5
#9 index.js:277:22
debug> list(4)
  8     debugger;
  9
 10     req_times++;
 11
>12     debugger;
 13
 14     var req_url = req.url;
 15
 16     debugger;
debug> watchers
debug> watch('req_times')
debug> watchers
  0: req_times = 1
debug> scripts
* 58: app.js
  61: index.js
  62: express.js
  63: index.js
  64: application.js
  65: index.js
  66: node.js
  70: debug.js
  71: index.js
  72: index.js
  73: index.js
  74: index.js
  75: index.js
  76: index.js
  77: index.js
  78: route.js
  79: array-flatten.js
  80: layer.js
  81: index.js
  82: index.js
  94: index.js
  95: index.js
  96: index.js
  97: index.js
  98: init.js
  99: query.js
  100: index.js
  101: stringify.js
  102: utils.js
  103: parse.js
  104: view.js
  105: utils.js
  106: index.js
  107: index.js
  108: index.js
  109: index.js
  110: index.js
  111: inherits.js
  112: index.js
  113: index.js
  114: index.js
  118: index.js
  119: mime.js
  120: index.js
  127: index.js
  128: index.js
  129: ipaddr.js
  133: request.js
  134: index.js
  135: index.js
  136: index.js
  137: index.js
  138: index.js
  139: index.js
  144: response.js
  145: index.js
  146: index.js
  147: index.js
  149: index.js
debug>

2016/8/27

参考:http://nodejs.cn/doc/node/deb...

by:wdd

阅读 7.3k

推荐阅读
洞香春
用户专栏

前端知识记录

766 人关注
124 篇文章
专栏主页