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 浏览器关闭事件
Jul 08 Javascript
微信小程序 wx:key详细介绍
Oct 28 Javascript
微信小程序开发之map地图实现教程
Jun 08 Javascript
Vue+Vux项目实践完整代码
Nov 30 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
May 12 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 Javascript
ES6小技巧之代替lodash
Jun 07 Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
Sep 04 Javascript
解决layer弹出层中表单不起作用的问题
Sep 09 Javascript
javascript合并两个数组最简单的实现方法
Sep 14 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 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生成WAP页面
2006/10/09 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
php中上传文件的的解决方案
2018/09/25 PHP
菜单效果
2006/10/14 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python文件处理
2016/02/29 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
普师专业个人自荐信范文
2013/11/26 职场文书
工作证明英文模板
2014/10/21 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
个性发展自我评价2015
2015/03/09 职场文书
工作收入证明模板
2015/06/12 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript