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 相关文章推荐
jQuery DOM操作小结与实例
Jan 07 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
JS定义回车事件(实现代码)
Jul 08 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
Nov 22 Javascript
js格式化金额可选是否带千分位以及保留精度
Jan 28 Javascript
document.write的几点使用心得
May 14 Javascript
jQuery插件pagewalkthrough实现引导页效果
Jul 05 Javascript
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
video.js添加自定义组件的方法
Dec 09 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,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
Python中的自定义函数学习笔记
2014/09/23 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python编写Windows Service服务程序
2018/01/04 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
司机职责范本
2014/03/08 职场文书
服装设计专业自荐信
2014/06/17 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang