基于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控件autocomplete 0.11演示及下载 1月5日已更新
Jan 09 Javascript
javascript 动态添加事件代码
Nov 30 Javascript
jquery 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
Feb 10 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
Mar 10 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
Jun 20 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
vue实现搜索过滤效果
May 28 Javascript
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
vue实现购物车案例
May 30 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
Sep 04 Javascript
Vue如何循环提取对象数组中的值
Nov 18 Vue.js
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
单位速度在实战中的运用
2020/03/04 星际争霸
php AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
python自动发送邮件脚本
2018/06/20 Python
提升Python程序性能的7个习惯
2019/04/14 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python实现扫雷小游戏
2020/04/24 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
外贸采购员求职的自我评价
2013/11/26 职场文书
女大学生自我鉴定
2013/12/09 职场文书
客服专员岗位职责
2014/02/28 职场文书
经典英文广告词
2014/03/18 职场文书
合伙协议书范本
2014/04/21 职场文书
电气工程师岗位职责
2015/02/12 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP