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 相关文章推荐
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
js/jquery获取文本框输入焦点的方法
Mar 04 Javascript
js实现简单锁屏功能实例
May 27 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
Jan 28 Javascript
jQuery实现的网格线绘制方法
Jun 20 Javascript
js捕捉键盘事件和按键键值的方法
Oct 10 Javascript
SVG描边动画
Feb 23 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
Jan 25 jQuery
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
Vue项目分环境打包的实现步骤
Apr 02 Javascript
vue里面使用mui的弹出日期选择插件实例
Sep 16 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写出自己的BLOG系统 2
2010/04/12 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
Python 正则表达式(转义问题)
2014/12/15 Python
Python中用于计算对数的log()方法
2015/05/15 Python
Python监控主机是否存活并以邮件报警
2015/09/22 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
新东网科技Java笔试题
2012/07/13 面试题
老师推荐信
2013/10/28 职场文书
师范生的个人求职信范文
2014/01/04 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis