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 相关文章推荐
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
jquery 插件学习(三)
Aug 06 Javascript
JS中令人发指的valueOf方法介绍
Feb 22 Javascript
使用JS获取当前地理位置方法汇总
Dec 18 Javascript
jQuery基于cookie实现的购物车实例分析
Dec 24 Javascript
基于JavaScript实现div层跟随滚动条滑动
Jan 12 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
Apr 26 Javascript
原生 JS Ajax,GET和POST 请求实例代码
Jun 08 Javascript
thinkjs之页面跳转同步异步操作
Feb 05 Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
Dec 06 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
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
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
JavaScript修改css样式style
2008/04/15 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
python 检查文件mime类型的方法
2018/12/08 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
如何验证python安装成功
2020/07/06 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
高校毕业生登记表自我鉴定
2013/11/03 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
2015年安全生产责任书
2015/01/30 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
法院个人总结
2015/03/03 职场文书
工作时间调整通知
2015/04/24 职场文书