原文地址:http://www.noanylove.com/2011/12/node-the-inspector-debugging-node-js/

用node-inspector调试Node.js

 
2011年12月15日 | 标签: JavaScriptNode.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)的更多相关文章

  1. 快捷使用Node Inspector调试NodeJS

    一:介绍 NodeJS开发有很多种调试方式,比如输出Log.WebStorm自带的调试器.Node Inspector等,其中Node Inspector是比较流行和被推荐的一种. 但是Node In ...

  2. nodejs 使用Google浏览器进行可视化调试——Node Inspector工具

    1.npm安装Node Inspector工具,全局安装 命令行执行npm install -g node-inspector 2.启动Node Inspector工具,命令行执行 node-insp ...

  3. 【译】在 Chrome 开发者工具中调试 node.js

    原文链接 : Debugging Node.js in Chrome DevTools 原文作者 : MATT DESLAURIERS 译文出自 : 掘金翻译计划 译文链接 : https://git ...

  4. 使用 node-inspector 调试 Node.js

    大部分基于 Node.js 的应用都是执行在浏览器中的, 比如强大的调试工具 node-inspector. node-inspector 是一个全然基于 Node.js 的开源在线调试工具,提供了强 ...

  5. 在 Chrome 开发者工具中调试 node.js

    命令行工具 devtool ,它可以在 Chrome 的开发者工具中运行 Node.js 程序. 下面的记录显示了在一个 HTTP 服务器中设置断点的情况. 该工具基于 Electron 将 Node ...

  6. 使用sublime调试node.js

    安装node相关 从node官网下载node的安装文件,我下的版本是node-v0.10.22-x64.exe,安装完node,node相关工具应该都加都环境变量path中了. 命令行下安装node- ...

  7. 调试 node.js 程序

    调试 node.js 程序 在程序开发中,如何快速的查找定位问题是一项非常重要的基本功.在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作. ...

  8. vscode 调试node.js

    在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可 ...

  9. Node.js实战(四)之调试Node.js

    当项目逐渐扩大以后,功能越来越多,这时有的时候需要增加或者修改,同时优化某些功能,就有可能出问题了.针对于线上Linux环境我们应该如何调试项目呢? 别怕,Node.js已经为我们考虑到了. 通过 n ...

随机推荐

  1. js 爱恨情仇说 this

    this 相信大家在写代码的时候都会遇到,可是怎么样才能用好this,估计这个还是有点困难的,虽然你有时候你会用到,但是他所在的具体的几个场景中所代表的是什么意思了?可能这个你就不是很清楚啊.这个就会 ...

  2. 《bootstrap》实战---小问题,大Bug

    参照书中代码写了个示例,能够实现大页面单行导航,小页面显示收缩按钮,但是就是不能让收缩按钮发挥作用.也不知道哪儿出了问题. 想想算了,代码也不多,重新来吧.写道导航的时候,突然发现一个<nav& ...

  3. Cenos7 编译安装 Mariadb Nginx PHP Memcache ZendOpcache (实测 笔记 Centos 7.0 + Mariadb 10.0.15 + Nginx 1.6.2 + PHP 5.5.19)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...

  4. js入门篇之Math对象

    Math对象用于执行数学任务 Math对象的属性: Math对象的方法: 常用属性和方法: Math.PI ----------------返回圆周率3.14 ... Math.ceil(x) --- ...

  5. CentOS下通过yum安装svn及配置

    CentOS下通过yum安装svn及配置 1.环境centos5.5 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata s ...

  6. SSH配置中出现问题

    问题1:org.springframework.beans.factory.NoSuchBeanDefinitionException: org.springframework.beans.facto ...

  7. 解决mysql数据库插入中文字段时出现??? 的问题

    1.检查并修改mysql的my.ini的配置文件   default-character-set=utf8 2.建立数据库是要指定字符集   create database mydb default ...

  8. 给Source Insight做个外挂系列之三--构建外挂软件的定制代码框架

    上一篇文章介绍了“TabSiPlus”是如何进行代码注入的,本篇将介绍如何构建一个外挂软件最重要的部分,也就是为其扩展功能的定制代码.本文前面提到过,由于windows进程管理的限制,扩展代码必须以动 ...

  9. 小技巧,关于OC打印指针地址和arc下的retaincount

    CFGetRetainCount((__bridge CFTypeRef)self  : 打印retainCount 打印指针的地址(不是指针指向对象的地址):NSLog(@"aStr指针内 ...

  10. java中类继承,到底继承了什么?

    继承的最大好处就是为了实现代码的复用.那么,子类到底从父类得到的什么呢? 实例成员 父类的private成员不会被子类继承,子类不能访问.但是子类对象的确包含父类的私有成员. 父类的 包访问成员 继承 ...