基于node.js之调试器详解


Posted in Javascript onAugust 22, 2017

1.在命令行窗口中,可以使用"node debug" 命令来启用调试器,代码如下:

node debug<需要被执行的脚本文件名>接下来根据一个实例进行学习调试过程:

编写app.js文件进行调试:

console.log('hello,word')
function foo(){
 console.log('hello,foo')
 return 100;
}
var bar = 'This is a pen';
var http = require('http')
var i = foo();
console.log(i)

1 在命令行窗口使用"node debug"命令,结果如下所示:

[root@kuber2 webproject]# node debug app.js
< Debugger listening on [::]:5858
connecting to 127.0.0.1:5858 ... ok
break in app.js:1
> 1 console.log('hello,word')
 2 function foo(){
 3 console.log('hello,foo')
debug>

在Node.js中提供了一个可以通过简单TCP协议来访问的调试器,进入调试后,首先连接调试器,如上图所示出现Debugger并后面跟有ok,说明调试器已经成功使用。"break in app.js:1" 表示脚本程序暂停的位置

2 继续执行可输入"cont"或"c",继续执行剩余的代码,结果如下所示:

[root@kuber2 webproject]# node debug app.js
< Debugger listening on [::]:5858
connecting to 127.0.0.1:5858 ... ok
break in app.js:1
> 1 console.log('hello,word')
 2 function foo(){
 3 console.log('hello,foo')
debug> c
< hello,word
< hello,foo
< 100

3 如果不需要执行剩余的所有脚本代码,输入"next"或"n"将程序执行到下一句可执行代码前,如下所示:

[root@kuber2 webproject]# node debug app.js
< Debugger listening on [::]:5858
connecting to 127.0.0.1:5858 ... ok
break in app.js:1
> 1 console.log('hello,word')
 2 function foo(){
 3 console.log('hello,foo')
debug> n
< hello,word
break in app.js:6
 4 return 100;
 5 }
> 6 var bar = 'This is a pen';
 7 var http = require('http')
 8 var i = foo();
debug>

4 如果想进入函数进行调试,可以在函数被调用出输入命令"step"或"s",进入函数体,如图所示:

break in app.js:8
 6 var bar = 'This is a pen';
 7 var http = require('http')
> 8 var i = foo();
 9 console.log(i)
 10 
debug> s
break in app.js:3
 1 console.log('hello,word')
 2 function foo(){
> 3 console.log('hello,foo')
 4 return 100;
 5 }
debug>

5 在函数体中可以用"n",逐步进行调试,还可输入"out"或"o" 立即执行完函数内所有代码,程序将暂停到被调用函数代码后的一句代码前,如图所示:

break in app.js:3
 1 console.log('hello,word')
 2 function foo(){
> 3 console.log('hello,foo')
 4 return 100;
 5 }
debug> n
< hello,foo
break in app.js:4
 2 function foo(){
 3 console.log('hello,foo')
> 4 return 100;
 5 }
 6 var bar = 'This is a pen';
debug> o
break in app.js:9
 7 var http = require('http')
 8 var i = foo();
> 9 console.log(i)
 10 
 11 });
debug>

6 利用watch可以观察变量或一些表达式的值,利用unwatch可以取消观看,具体应用如下代码所示:

break in app.js:1
> 1 console.log('hello,word')
 2 function foo(){
 3 console.log('hello,foo')
debug> watch("i")
debug> watch("i==100")
debug> n
< hello,word
break in app.js:6
Watchers:
 0: i = undefined
 1: i==100 = false

 4 return 100;
 5 }
> 6 var bar = 'This is a pen';
 7 var http = require('http')
 8 var i = foo();
debug> n
break in app.js:7
Watchers:
 0: i = undefined
 1: i==100 = false

 5 }
 6 var bar = 'This is a pen';
> 7 var http = require('http')
 8 var i = foo();
 9 console.log(i)
debug> n
break in app.js:8
Watchers:
 0: i = undefined
 1: i==100 = false

 6 var bar = 'This is a pen';
 7 var http = require('http')
> 8 var i = foo();
 9 console.log(i)
 10 
debug> n
< hello,foo
break in app.js:9
Watchers:
 0: i = 100
 1: i==100 = true

 7 var http = require('http')
 8 var i = foo();
> 9 console.log(i)
 10 
 11 });
debug> unwatch("i")
debug> unwatch("i==100")
debug> n
< 100
break in app.js:11
 9 console.log(i)
 10 
>11 });
debug>

7 可以利用setBreakpoint(filename,line)或cb(filename,line),设置断点,第一个参数为设置断点的文件名,不填默认为i正在运行的文件,line为需要加断点的行号;可以利用clearBreakPoint(filename,line)或cb(filename,line)取消断点

8 使用list(n)可以显示所调试语句的前几后与后几行代码

9 使用repl可以特推出debug模式

10 使用restart可以重新开始文本调试

11 使用kill终止脚本文件调试

12 利用kill终止文本调试后可利用run重新开始

13 利用backtrace或bt可以返回运行代码的所处位置

14 利用script可以查看所有被加载的模块名称

以上这篇基于node.js之调试器详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js小技巧--自动隐藏红叉叉
Aug 13 Javascript
javascript用户注册提示效果的简单实例
Aug 17 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
jquery实现倒计时功能
Dec 28 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
浅谈js里面的InttoStr和StrtoInt
Jun 14 Javascript
省市区三级联动jquery实现代码
Apr 15 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 Javascript
详解react关于事件绑定this的四种方式
Mar 09 Javascript
关于js陀螺仪的理解分析
Apr 11 Javascript
React 父子组件通信的实现方法
Dec 05 Javascript
js获取css的各种样式并且设置他们的方法
Aug 22 #Javascript
简单实现js上传文件功能
Aug 21 #Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 #Javascript
JavaScript实现简单图片轮播效果
Aug 21 #Javascript
Javascript中 toFixed四舍六入方法
Aug 21 #Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 #Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 #Javascript
You might like
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
php while循环控制的简单实例
2016/05/30 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
Python subprocess模块常见用法分析
2018/06/12 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
Python的垃圾回收机制详解
2019/08/28 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
Python3常见函数range()用法详解
2019/12/30 Python
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
先进个人获奖感言
2014/01/24 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
个人债务授权委托书
2014/10/17 职场文书
五年级上册复习计划
2015/01/19 职场文书
刑事案件上诉状
2015/05/23 职场文书