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 相关文章推荐
用Javascript实现Sleep暂停功能代码
Sep 03 Javascript
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
JQuery实现鼠标滑过显示导航下拉列表
Sep 12 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
jquery实现提示语淡入效果
May 05 jQuery
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
vue引入新版 vue-awesome-swiper插件填坑问题
Jan 25 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
Aug 24 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
VUE+node(express)实现前后端分离
Oct 13 Javascript
JS数组方法some、every和find的使用详情
Oct 05 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中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
java必学必会之static关键字
2015/12/03 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
深入解析Python中的__builtins__内建对象
2016/06/21 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
Python函数和模块的使用总结
2019/05/20 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
求网格中的黑点分布
2013/11/06 面试题
销售行政专员职责
2014/01/03 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
高三学生评语大全
2014/04/25 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python