基于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实现Sleep函数的代码
Mar 04 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
Nov 30 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
解析javascript中鼠标滚轮事件
May 26 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
原生JS实现几个常用DOM操作API实例
Jan 19 Javascript
vue项目使用微信公众号支付总结及遇到的坑
Oct 23 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
Jul 21 Javascript
vue 手机物理监听键+退出提示代码
Sep 09 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
如何手工释放资源
2013/12/15 面试题
领导班子自我剖析材料
2014/08/16 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL