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 相关文章推荐
关于document.cookie的使用javascript
Oct 29 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
Dec 14 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
微信小程序实现倒计时补零功能
Jul 09 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
Jul 09 Javascript
详解使用Next.js构建服务端渲染应用
Jul 10 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
layer更改皮肤的实现方法
Sep 11 Javascript
vuex存值与取值的实例
Nov 06 Javascript
Vue实现导航栏菜单
Aug 19 Javascript
Javascript中的奇葩知识,你知道吗?
Jan 25 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
php5.3 废弃函数小结
2010/05/16 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
为你总结一些php信息函数
2015/10/21 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
asp 取文本框名称代码
2008/12/02 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
推荐11个实用Python库
2015/01/23 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
extern是什么意思
2016/03/10 面试题
小学新学期寄语
2014/04/02 职场文书
低碳环保倡议书
2014/04/14 职场文书
服务之星事迹材料
2014/05/03 职场文书
出国留学英文自荐信
2015/03/25 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP