Node.js调试技术总结分享


Posted in Javascript onMarch 12, 2017

前言

众所周知调试技术与开发技术构成了软件开发的基石。目前Nodejs作为新型的Web Server开发栈倍受开发者关注。总的来说Nodejs的应用程序主要有两部分:JavaScript编写的js模块和C语言编译的二进制模块。

这里主要介绍三种avaScript模块的调试方法:基于Nodejs内建的调试器,基于V8调试插件和基于Chrome浏览器的调试器。

以下所有的操作都将基于如下代码(example.js):

var http = require('http');
var url = require('url');
http.createServer(function (req, res) {
 var path = url.parse(req.url).pathname;
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end(path);
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

一. 基于Nodejs内建的调试器

Nodejs提供了一个内建调试器来帮助开发者调试应用程序。想要开启调试器我们需要在代码中加入debugger标签,当Nodejs执行到debugger标签时会自动暂停(debugger标签相当于在代码中开启一个断点)。代码如下:

var path = url.parse(req.url).pathname;
debugger;
res.writeHead(200, {'Content-Type': 'text/plain'});

执行命令:node debug example.js 就可以进入调试模式。

Node.js调试技术总结分享

在debug模式下,可以使用内建命令如repl去评估变量和表达式的值(如2所示)。我们也可以通过help命令来获取完整的调试命令列表。

Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),
watch, unwatch, watchers, repl, restart, kill, list, scripts, breakpoints, version

二. 基于V8插件的调试器

Nodejs是基于google V8的引擎上构建的,Google为Eclipse提供了一个对应的调试插件。关于如何在Eclipse中安装和调试Nodejs程序就不再重复描述了,网上已经有很多的文章了,唯一要注意的是在默认情况下V8引擎支持的调试模式是本地模式。如果想要开启远程调试的话,我们需要修改Nodejs中的V8源文件: /deps/v8/src/platform-posix.cc

addr.sin_family = AF_INET;
 addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); --> INADDR_ANY
 addr.sin_port = htons(port);

然后重新编译Nodejs。

提示:

用插件来调试nodejs程序,你有时候会遇到什么connect refuse, get version failed等等错误。那么请注意你使用的ip的地址, 一般下127.0.0.1的回环地址是都工作的。如果你使用真实的ip地址,请检查防火墙设置。

三. 基于Chrome浏览器的调试器

既然我们可以通过V8的调试插件来调试,那是否也可以借用Chrome浏览器的JavaScript调试器来调试呢?node-inspector模块提供了这样一种可能。我们需要先通过npm来安装node-inspector

npm install -g node-inspector // -g 导入安装路径到环境变量

node-inspector是通过websocket方式来转向debug输入输出的。因此,我们在调试前要先启动node-inspector来监听Nodejs的debug调试端口。

Node.js调试技术总结分享

默认情况下node-inspector的端口是8080,可以通过参数--web-port=[port]来设置端口。在启动node-inpspector之后,我们可以通过--debug或--debug-brk来启动nodejs程序。通过在浏览器输入http://[ip address]:8080/debug?port=5858,我们会得到如下的调试窗口:

Node.js调试技术总结分享

这三种方法各自有优缺点,我个人比较欣赏node-inspector的方式。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JS面向对象、prototype、call()、apply()
May 14 Javascript
Jquery Validate 正则表达式实用验证代码大全
Aug 23 Javascript
js实现身份证号码验证的简单实例
Feb 19 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
May 08 Javascript
javascript中AJAX用法实例分析
Jan 30 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
Jun 05 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
node.js将MongoDB数据同步到MySQL的步骤
Dec 10 Javascript
vue根据值给予不同class的实例
Sep 29 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 Javascript
js抽奖转盘实现方法分析
May 16 Javascript
ant design charts 获取后端接口数据展示
May 25 Javascript
JavaScript中双符号的运算详解
Mar 12 #Javascript
利用Node.js对文件进行重命名
Mar 12 #Javascript
纯js的右下角弹窗实例
Mar 12 #Javascript
彻底学会Angular.js中的transclusion
Mar 12 #Javascript
jquery拼接ajax 的json和字符串拼接的方法
Mar 11 #Javascript
jquery mobile实现可折叠的导航按钮
Mar 11 #Javascript
前端开发之CSS原理详解
Mar 11 #Javascript
You might like
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
python全栈开发语法总结
2020/11/22 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
彪马英国官网:PUMA英国
2019/02/11 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
清洁工岗位职责
2014/01/29 职场文书
红头文件任命书范本
2014/06/05 职场文书
小学生植树节活动总结
2014/07/04 职场文书
学生打架检讨书
2014/10/20 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android