用node-inspector调试Node.js(转自NOANYLOVE'S BLOG)
原文地址:http://www.noanylove.com/2011/12/node-the-inspector-debugging-node-js/
用node-inspector调试Node.js
重要:因为node和node-inspector更新了的缘故,现在的界面有一些不同,抽空我会更新一下。另外,下面的debug参数前应该是两个“-”,不知道为什么显示出来只有一个“-”。比较郁闷。
据说,一个程序员一辈子干得最多的事不是在写代码,而是在和Bug做斗争,所以我们也需要找个能够调试Node.js代码的工具。Node.js的JavaScript与我们常见的用于浏览器客户端的JavaScript有许多不同之处,这使得许多支持JavaScript开发的IDE或者调试器等都不支持Node.js(我会在以后的文章中介绍一些支持Node.js开发的IDE)。这里,我介绍一个官方推荐的Node.js调试工具——node-inspector。
准备工作
node-inspector通过Web网页与用户进行交互,比命令行下的调试工具要美观、操作也方便许多。首先我们需要一个基于WebKit内核的浏览器,比如Chrome, Safari,或者 Maxthon(遨游浏览器)、QQ浏览器、搜狗浏览器等(注意:后面三款浏览器只有在“极速模式”下才是WebKit内核的)。
然后我们通过npm以全局模式安装node-inspector。在命令行下运行:npm install –g node-inspector 。稍等片刻后,npm会输出一大段路径表明把node-inspector以及其依赖的模块安装在了什么地方。
PS:node-inspector使用的paperboy模块有一个bug,在过滤路径的时候没有考虑到Windows下情况,导致在Windows下运行时会返回403。不过前几天paperboy发布的新版本0.0.3终于修复了这个问题,所以现在可以正常使用了。
开始调试
调试的时候,Node.js主程序会在本地开启一个TCP调试端口,调试工具通过这个端口与Node.js通信来实现调试。我们通过node –debug[=port] App.js 或者 node –debug-brk[=port] App.js (注意,这里有显示问题,debug前面应该有两个“-”,不知道为什么显示出来只有一个了,下面代码框中的那种格式才是正确的)命令以调试模式运行脚本。–debug 和
–debug-brk参数的区别在于,前者会直接运行脚本,而后者则会暂停在脚本开头处,等待调试器连接后,由调试器的指令来决定运行。=port是可选参数,紧随在–debug或者–debug-brk之后(中间没有空格),用于指定Node开启的调试端口,如果不指定该参数,则Node.js默认会使用5858端口。App.js则是你要调试的脚本文件名。
如:
node --debug NodeApp.js
node --debug-brk=8080 MyTest.js
直接上实例,我们把下面的脚本保存为example.js,然后运行node –debug example.js 。
var util = require('util');
var count = 0;
util.debug("Starting ...");
function timer_tick() {
count = count + 1;
util.debug("Tick count: " + count);
if (count === 10) {
count += 1000;
util.debug("Set break here");
}
setTimeout(timer_tick, 1000);
}
timer_tick();
然后在命令行中运行:node-inspector ,如图一所所示。若提示warn – error raised: Error: listen EADDRINUSE 则表明node-inspector默认使用的8080端口已经被别的程序占用了,你可以通过node-inspector –web-port=新端口号 来指定一个未被占用的端口。
图一:运行node-inspector
然后我们在浏览器中打开http://127.0.0.1:8080/debug?port=5858 (别管命令提示符中的那个http://0.0.0.0:8080/debug?port=5858 地址,那是逗你玩的)。URL中的port=5858指定了Node.js的调试端口,如果你在运行Node.js时指定了调试端口,则这里的5858要修改成指定端口。
PS:可以修改node-inspector安装目录下的config.json指定node-inspector的Web端口和调试端口。
我这里用的是Maxthon,注意要使用“极速模式”(就是地址栏右边那个小闪电的图标)。打开后调试界面如图二所示。
图二:node-inspector调试界面
界面的主体部分就是代码浏览窗口,如果没有显示代码的话,点击界面最左上方的Scripts按钮即可;若显示的代码不是example.js的内容,点击界面左上方、Profiles按钮下方的按钮(就是图三中显示“D:\example.js:0 ”的那个按钮),在弹出的下拉列表中选中example.js,如图三所示。你也可以在这里切换到其他模块文件中查看其代码。
图三:切换代码
点击代码前的代码行数字就可以给当前代码行下断点。在这个实例中,我们可以在util.debug(“Tick count: ” + count);下断点,Node就会很快停下。
界面最左边的面板提供了代码搜索,以及“暂停/继续”、“步过”、“步入”、“执行到返回”、“激活/取消断点”几个常用功能按钮,还有监控表达式等功能,如图四所示。
图四:功能版面
个人认为node-inspector的调试界面做得非常不错,简介美观,基本功能都具备了,是调试Node.js的一个不错选择。
用node-inspector调试Node.js(转自NOANYLOVE'S BLOG)的更多相关文章
- 快捷使用Node Inspector调试NodeJS
一:介绍 NodeJS开发有很多种调试方式,比如输出Log.WebStorm自带的调试器.Node Inspector等,其中Node Inspector是比较流行和被推荐的一种. 但是Node In ...
- nodejs 使用Google浏览器进行可视化调试——Node Inspector工具
1.npm安装Node Inspector工具,全局安装 命令行执行npm install -g node-inspector 2.启动Node Inspector工具,命令行执行 node-insp ...
- 【译】在 Chrome 开发者工具中调试 node.js
原文链接 : Debugging Node.js in Chrome DevTools 原文作者 : MATT DESLAURIERS 译文出自 : 掘金翻译计划 译文链接 : https://git ...
- 使用 node-inspector 调试 Node.js
大部分基于 Node.js 的应用都是执行在浏览器中的, 比如强大的调试工具 node-inspector. node-inspector 是一个全然基于 Node.js 的开源在线调试工具,提供了强 ...
- 在 Chrome 开发者工具中调试 node.js
命令行工具 devtool ,它可以在 Chrome 的开发者工具中运行 Node.js 程序. 下面的记录显示了在一个 HTTP 服务器中设置断点的情况. 该工具基于 Electron 将 Node ...
- 使用sublime调试node.js
安装node相关 从node官网下载node的安装文件,我下的版本是node-v0.10.22-x64.exe,安装完node,node相关工具应该都加都环境变量path中了. 命令行下安装node- ...
- 调试 node.js 程序
调试 node.js 程序 在程序开发中,如何快速的查找定位问题是一项非常重要的基本功.在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作. ...
- vscode 调试node.js
在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可 ...
- Node.js实战(四)之调试Node.js
当项目逐渐扩大以后,功能越来越多,这时有的时候需要增加或者修改,同时优化某些功能,就有可能出问题了.针对于线上Linux环境我们应该如何调试项目呢? 别怕,Node.js已经为我们考虑到了. 通过 n ...
随机推荐
- Mysql 5.7 使用SSL安全连接
MySQL默认的数据通道是不加密的,在一些安全性要求特别高的场景下,我们需要配置MySQL端口为SSL,使得数据通道加密处理,避免敏感信息泄漏和被篡改.当然,启用MySQL SSL之后,由于每个数据包 ...
- Constructing Roads——F
F. Constructing Roads There are N villages, which are numbered from 1 to N, and you should build som ...
- java Properties 配置信息类
Properties(配置信息类):主要用于生产配置文件和读取配置文件信息. ----> 是一个集合类 继承HashTable 存值是以键-值的方式. package com.beiwo.io; ...
- 建设移动端web开发会涉及到的meta标签
<meta name="format-detection" content="telephone=no"> <meta name=" ...
- 浅谈WebLogic和Tomcat
J2ee开发主要是浏览器和服务器进行交互的一种结构.逻辑都是在后台进行处理,然后再把结果传输回给浏览器.可以看出服务器在这种架构是非常重要的. 这几天接触到两种Java的web服务器,做项目用的Tom ...
- C++标准库 -- pair
头文件:<utility> 可访问属性: first 第一个值 second 第二个值 可访问方法: swap(pair) 和另外一个pair交换值 其他相关方法: make_pair(v ...
- [ZZ] A Proposal For Compiling Direct3D HLSL With LLVM (Written by Michael Larabel )
http://www.phoronix.com/scan.php?page=news_item&px=OTI2NA Note: Something very instersting to w ...
- wordpress 分类相关
分类类型,层级 wp中的分类.文章类型(post,page,video,image).标签.自定义分类.自定义标签都是分类形式.有些分类是有层级关系,有些没有.如图: taxonomy分类(categ ...
- eclipse导入项目后,java文件无法编辑的问题
新公司第一天,从svn checkout maven项目后,导入eclipse,发现文件的图标不对,如下图箭头所示,出现这个问题的原因, 是项目的的目录下没有.classpath文件,所以需要执行下m ...
- 合同主体列表添加两条合同主体,返回合并支付页面,支付总弹"请选择合同主体",删除后,竟然还能支付(改合并支付页面的字段状态)
bug描述: 操作步骤:1.进入"商标续展"产品详情页面,点击立即购买(数量设为2),进入合并订单界面,选择合同主体,点击全部,清空所有合同主体2.新建合同主体保存,设置该合同主体 ...