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 相关文章推荐
网站页面自动跳转实现方法PHP、JSP(上)
Aug 01 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
Javascript浅谈之引用类型
Dec 18 Javascript
jQuery 实现评论等级好评差评特效
May 06 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
javascript常用经典算法详解
Jan 11 Javascript
小程序页面动态配置实现方法
Feb 05 Javascript
vue+elementUI动态生成面包屑导航教程
Nov 04 Javascript
js实现多图和单图上传显示
Dec 18 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 Javascript
微信小程序实现选择地址省市区三级联动
Jun 21 Javascript
Vue通过懒加载提升页面响应速度
May 10 Vue.js
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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
PHP开发需要注意的安全问题
2010/09/01 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
实现PHP搜索加分页
2016/10/12 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
python抓取网页图片并放到指定文件夹
2014/04/24 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
python 实现矩阵填充0的例子
2019/11/29 Python
python中数字是否为可变类型
2020/07/08 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
比利时买床:Beter Bed
2017/12/06 全球购物
怎么写好自荐信
2013/10/30 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
九年级家长会邀请函
2014/01/15 职场文书
采购求职信
2014/03/17 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
努力工作保证书
2015/02/28 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis