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 相关文章推荐
OfflineSave离线保存代码再次发布使用说明
May 23 Javascript
jQuery实现根据类型自动显示和隐藏表单
Mar 18 Javascript
jquery实现触发时更新下拉列表内容的方法
Dec 02 Javascript
javascript实现unicode与ASCII相互转换的方法
Dec 10 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
JavaScript实现Java中Map容器的方法
Oct 09 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
Vue项目中最新用到的一些实用小技巧
Nov 06 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
layui table去掉右侧滑动条的实现方法
Sep 05 Javascript
js数据类型转换与流程控制操作实例分析
Dec 18 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定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
JS实现密码框效果
2020/09/10 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
python多线程http下载实现示例
2013/12/30 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
毕业生就业自荐信
2013/12/04 职场文书
车间主任岗位职责
2014/03/16 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
仲裁协议书
2014/09/26 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python