基于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 空位补零实现代码
Feb 26 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
提交按钮的name='submit'引起的js失效问题及原因
Feb 25 Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
详解Angular6学习笔记之主从组件
Sep 05 Javascript
vue项目前端知识点整理【收藏】
May 13 Javascript
javascript 易错知识点实例小结
Apr 25 Javascript
Node.JS如何实现JWT原理
Sep 18 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
一个简单计数器的源代码
2006/10/09 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
javascript插入样式实现代码
2012/02/22 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
详解JavaScript 的变量
2019/03/08 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python3实现磁盘空间监控
2018/06/21 Python
python实现简易动态时钟
2018/11/19 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
python实现连连看游戏
2020/02/14 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
公司员工宿舍管理制度
2015/08/03 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL