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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
jQuery移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
javascript常用的方法整理
Aug 20 Javascript
jquery+html5烂漫爱心表白动画代码分享
Aug 24 Javascript
jquery插件之文字间歇自动向上滚动效果代码
Feb 25 Javascript
基于bootstrap插件实现autocomplete自动完成表单
May 07 Javascript
Vue.js 实现数据展示全部和收起功能
Sep 05 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
jQuery操作事件完整实例分析
Jan 10 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
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
JS如何生成动态列表
2020/09/22 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Python计算三角函数之asin()方法的使用
2015/05/15 Python
Python 数据结构之旋转链表
2017/02/25 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
python中的二维列表实例详解
2018/06/19 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
材料员岗位职责
2014/03/13 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
员工辞职信范文
2015/03/02 职场文书
综合办公室岗位职责
2015/04/11 职场文书