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 相关文章推荐
彻底搞懂JS无缝滚动代码
Jan 03 Javascript
js 新浪的一个图片播放图片轮换效果代码
Jul 15 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
JsRender for object语法简介
Oct 31 Javascript
node.js require() 源码解读
Dec 13 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
Jun 14 Javascript
初识简单却不失优雅的Vue.js
Sep 12 Javascript
layer弹出子iframe层父子页面传值的实现方法
Nov 22 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
用webpack4开发小程序的实现方法
Jun 04 Javascript
layui实现三级导航菜单
Jul 26 Javascript
JavaScript实现网页动态生成表格
Nov 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
JavaScript中的集合及效率
2010/01/08 Javascript
jquery处理json对象
2014/11/03 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
原生js制作简单的数字键盘
2015/04/24 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
js实现点击烟花特效
2020/10/14 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python实现端口复用实例代码
2014/07/03 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
this关键字的作用
2016/01/30 面试题
大学生会计职业生涯规划范文
2014/02/28 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
中队活动总结
2014/08/27 职场文书
员工趣味活动方案
2014/08/27 职场文书
2014离婚协议书范文
2014/09/10 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏
python游戏开发之pygame实现接球小游戏
2022/04/22 Python