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 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
JavaScript中的其他对象
Jan 16 Javascript
javascript 客户端验证上传图片的大小(兼容IE和火狐)
Aug 15 Javascript
基于JQuery的asp.net树实现代码
Nov 30 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
ajax不执行success回调而是执行了error回调
Dec 10 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
Dec 16 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
vue 注册组件的使用详解
May 05 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
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
Vue项目中配置pug解析支持
2019/05/10 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
PyQt5实现下载进度条效果
2018/04/19 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
Python中os模块功能与用法详解
2020/02/26 Python
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
写给老师的表扬信
2014/01/21 职场文书
员工安全生产承诺书
2014/05/22 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
python tkinter模块的简单使用
2021/04/07 Python
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
浅谈Python 中的复数问题
2021/05/19 Python
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
用Python可视化新冠疫情数据
2022/01/18 Python