基于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 相关文章推荐
jQuery与其它库冲突的解决方法
Jun 25 Javascript
jQuery实现自动调整字体大小的方法
Jun 15 Javascript
javascript实现简单的全选和反选功能
Jan 05 Javascript
JS实现图片平面旋转的方法
Mar 01 Javascript
第六篇Bootstrap表格样式介绍
Jun 21 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
jquery广告无缝轮播实例
Jan 05 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
Mar 14 Javascript
详解vue为什么要求组件模板只能有一个根元素
Jul 22 Javascript
js中实现继承的五种方法
Jan 25 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 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
django模板结构优化的方法
2019/02/28 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
应届生英语教师求职信
2013/11/05 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
水利学院求职自荐书
2014/02/01 职场文书
投标承诺书范本
2014/03/27 职场文书
教师读书活动总结
2014/05/07 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
八月一日观后感
2015/06/10 职场文书
乔迁新居祝福语
2019/11/04 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
Redis 哨兵机制及配置实现
2022/03/25 Redis
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang