Node.js Debugger

Debugger

稳定性:2-Stable

Debugger

为了方便开发,开发人员可以使用Debugger模块进行调试,其功能是基于TCP协议和Node.js内置的调试客户端实现的,使用时添加命令行参数debug即可。照比一些IDE的调试功能,Debugger还不是很全面,但也可以满足大多数的调试需求

$ node debug main.js
< Debugger listening on [::]:5858
connecting to 127.0.0.1:5858 ... ok
break in main.js:477
 475 
 476 
>477 const Koa = require('koa');
 478 const app = new Koa();
 479 // app.use(async (ctx, next) => {
debug> 

如果想在调试的时候设置断点,可以在你的源代码中添加debugger语句,这样调试时程序就会在这行停住

// 一个简单的demo main.js
let a = `Hello I am a`;
let b = ['I', 'am', 'b'];
let obj = {
  string: 'string',
  arr: [1,2,3],
  num: 1
}
debugger;// 在这里设置断点
console.log('finish debugger');

开始调试main.js,这次调试的目的是在断点停住时查看a,b,obj的值,具体说明请看下面的注释

$ node debug main.js 
< Debugger listening on [::]:5858
connecting to 127.0.0.1:5858 ... ok
break in main.js:491
 489 // console.log(`server is running at ${port}`);
 490 
>491 let a = `Hello I am a`;  // 程序运行的第一行代码会默认设置断点,在这停住
 492 let b = ['I', 'am', 'b'];
 493 let obj = {
debug> c  // c代表代码继续执行
break in main.js:498
 496   num: 1
 497 }
>498 debugger;  // 这一行停住
 499 console.log('finish debugger');
 500 });
debug> repl  // 开启repl,Ctrl + C退出repl
Press Ctrl + C to leave debug repl
> a  //查看a变量
'Hello I am a'
> b //查看b变量
[ 'I', 'am', 'b' ]
> obj //查看obj变量
{ string: 'string', arr: [ 1, 2, 3 ], num: 1 }
> test // 查看test,但是没有定义
ReferenceError: test is not defined
debug> c  //退出repl后再次继续运行代码
< finish debugger
debug> 

Command reference

下面介绍调试常用的一些命令,您也可以在调试的过程中输入help来查看这些命令

Stepping
  • cont, c - 程序继续运行
  • next, n - 程序继续运行(一行)
  • step, s - 进入某些方法,函数
  • out, o - 跳出某些方法,函数
  • pause - 暂停
Breakpoints
  • setBreakpoint(), sb() - 在当前行设置断点
  • setBreakpoint(line), sb(line) - 在指定行设置断点
  • setBreakpoint('fn()'), sb(...) - 在函数体的第一个语句设置断点
  • setBreakpoint('script.js', 1), sb(...) - 在文件script.js的第一行设置断点
  • clearBreakpoint('script.js', 1), cb(...) - 取消文件script.js的第一行的断点
Information
  • backtrace, bt - 打印backtrace追溯信息
  • list(5) - 显示源码的内容,前5行和后5行
  • watch(expr) - 添加监视器,可以随时查看变量的值。比如,作者想监视a变量,就执行watch('a')即可,然后通过watchers进行查看
  • unwatch(expr) - 移除指定的监视器
  • watchers - 展示监视器所监视的变量的值(在每个断点停下时都会自动显示watchers)
  • repl - 开启repl
  • exec expr - 在调试过程中执行表达式,比如更改a变量的值,可以执行exec a = 2
Execution control
  • run - 执行程序,在调试开始时会自动运行
  • restart - 重启程序
  • kill - 结束程序
Various
  • scripts - 展示所有加载的脚本
  • version - V8版本

Advanced Usage

如果一个Node.js的程序通过--debug参数启动的(注意是--debug不是debug),如下图,通过--debug参数启动程序,我们可知Debugger URLpid分别是127.0.0.1:585810547,根据这两个值也可以直接调试该程序

  • node debug -p <pid> 通过pid调试,例如node debug -p 10547
  • node debug <URL> 通过URL调试,例如node debug 127.0.0.1:5858
pid 和 URL 的用法

V8 Inspector Integration for Node.js

通过V8强大的集成监视器来调试,注意,这只是一个实验性的功能。通过它,我们就可以使用Chrome DevTools来调试我们的Node.js程序,使用命令行参数--inspect即可,这时,Debugger会默认监听9229端口,如果想指定Debugger的端口,如8888端口,可以使用--inspect=8888,如果想在程序的第一行打断点停住,可以加上--debug-brk参数,直接上图

V8 Debugger

本文档是根据文档Node.js v6.10.3 Documentation进行总结的,如您在阅读的过程中发现问题,请联系作者,感谢您的支持!

简书作者 小菜荔枝 转载请联系作者获得授权

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容