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 URL
和pid
分别是127.0.0.1:5858
和10547
,根据这两个值也可以直接调试该程序
-
node debug -p <pid>
通过pid
调试,例如node debug -p 10547
-
node debug <URL>
通过URL
调试,例如node debug 127.0.0.1:5858
V8 Inspector Integration for Node.js
通过V8强大的集成监视器来调试,注意,这只是一个实验性的功能。通过它,我们就可以使用Chrome DevTools
来调试我们的Node.js程序,使用命令行参数--inspect
即可,这时,Debugger
会默认监听9229
端口,如果想指定Debugger
的端口,如8888端口,可以使用--inspect=8888
,如果想在程序的第一行打断点停住,可以加上--debug-brk
参数,直接上图
本文档是根据文档Node.js v6.10.3 Documentation
进行总结的,如您在阅读的过程中发现问题,请联系作者,感谢您的支持!
简书作者 小菜荔枝 转载请联系作者获得授权
网友评论