基于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 相关文章推荐
javascript之大字符串的连接的StringBuffer 类
May 08 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
Nov 20 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
Javascript基础教程之数据类型 (字符串 String)
Jan 18 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
Dec 08 Javascript
快速入门Vue
Dec 19 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
Aug 16 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使用iconv中文截断问题的解决方法
2015/02/11 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
Python各种扩展名区别点整理
2020/02/27 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
公共事业管理本科生求职信
2013/10/07 职场文书
大学生毕业自荐信
2013/10/10 职场文书
大一新生学期自我评价
2014/04/09 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
三方股东合作协议书
2014/10/28 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书