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的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 Javascript
IE的fireEvent方法概述及应用
Feb 22 Javascript
JS判断不能为空实例代码
Nov 26 Javascript
js动画效果制件让图片组成动画代码分享
Jan 14 Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 Javascript
Bootstrap3学习笔记(三)之表格
May 20 Javascript
AngularJS入门教程之路由与多视图详解
Aug 19 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
vuejs使用FormData实现ajax上传图片文件
Aug 08 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
Oct 22 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 程式大小
2006/12/06 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
php发送与接收流文件的方法
2015/02/11 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
js 小数取整的函数
2010/05/10 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Django REST framework 分页的实现代码
2019/06/19 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
特步官方商城:Xtep
2017/03/21 全球购物
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
计算机大学生的自我评价
2013/10/15 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
新员工入职欢迎词
2015/01/23 职场文书
《包身工》教学反思
2016/02/23 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python