基于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 mouseover、mouseout停止事件冒泡的解决方案
Apr 07 Javascript
Jquery进度条插件 Progress Bar小问题解决
Jul 12 Javascript
固定网页背景图同时保持图片比例的思路代码
Aug 15 Javascript
JavaScript实现可拖拽的拖动层Div实例
Aug 05 Javascript
基于BootStarp的Dailog
Apr 28 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
jquery实现自定义图片裁剪功能【推荐】
Mar 08 Javascript
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 Javascript
React Native 截屏组件的示例代码
Dec 06 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
r.js来合并压缩css文件的示例
Apr 26 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP Undefined index报错的修复方法
2011/07/17 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
原生js实现随机点名
2020/07/05 Javascript
详解Python核心对象类型字符串
2018/02/11 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
python中字符串内置函数的用法总结
2018/09/13 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
python3 xpath和requests应用详解
2020/03/06 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
物业管理计划书
2014/01/10 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
元旦获奖感言
2014/03/08 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
社区工作者演讲稿
2014/05/23 职场文书
新闻传播专业求职信
2014/07/22 职场文书
学校捐书活动总结
2015/05/08 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
golang中的空接口使用详解
2021/03/30 Python
java解析XML详解
2021/07/09 Java/Android