学习NodeJS第三天:打造Nodejs的调试环境(中)

2012-12-07 因追加《学习 NodeJS 第三天:打造 Nodejs 的调试环境(下)》的缘故,特此将原来的《下》篇改为《中》篇,如标题所示。

上一期我们为大家介绍了安装 Eclipse 调试插件的情况,这对于还不熟悉 Eclipse 开发平台的用户是至关重要的,希望可以通过一步步的图片加文字说明,把 Nodejs 困难的地方变简单和清晰、友好和轻松。

现在正式进入要调试程序肯定要有调试代码。下面就是我们第一个测试的代码,很小的行数:

var sys = require('sys');
// 此乃计数器变量,Suspend(中断挂起)期间可以观察该变量的变化。
var count = 0;
sys.debug("开始进行调试……");
function timer_tick() {
count++;
sys.debug("计数器:" + count);
if (count === 10) {
count += 1000;
sys.debug("能在这里打点吗?错过10后不行啦");
}
setTimeout(timer_tick, 1000);
}
timer_tick();

该段代码是最简单清晰不过的了,就是通过一个 count 的累加器不断地让 nodejs 运行作累加。怎么运行这段代码?呵呵,如果尚未清楚如何执行一个最简单的 nodejs 的话还是在这里交待一下:在 CMD 命令行键入(须当前nodejs目录下)nodejs dbgtest.js。nodejs.exe 的参数是 javascript 的源码文件。但是因为现在我们是调试的情景,必须加上“--debug”的参数打开调试的接口,即 node –debug <文件名>。另外,nodejs 还支持 --debug-brk 的参数,下文再讲。

输入命令 nodejs -- debug dbgtest.js 后运行的截图如下:

如图则是成功运行 nodejs 的情况,正常情况下不断累加计数器(count++)。本身是 console 输出的地方,通过观察 console 的提示,我们可以看到 nodejs 内部已经在内容打开 5858 的端口等待远程调试器,此刻我们接着要做的就是运行 Eclipse(进入 Debug View),两者一起配合调试的工作,——这就是“远程”而非本地调试的含义。怎么看是否在 Debug 的视图(View)下呢?留意一下是否被选中即可,在 Eclipse 的右上角。

进入下一步的讲述之前,笔者觉得有必要加入一个小插曲,就是提及一下 nodejs 所支持的调试命令(Thanks to Nodejs sys对象),列举如下:

  • sys.debug() 同步打印,调试的时候很有用
  • sys.log() 带时间的输出信息
  • sys.error() 输出信息
  • sys.inspect(object, showHidden, depth)  显示一个对象的所有描述,如果 showHidden 为 false 时,只显示名称,没有省略。Depth 指定隔多长时间去递归对象,默认是两次
  • sys.puts() 类似与 document.writeln(),在屏幕上打印,在末尾添加换行
  • sys.print() 类似与 document.write(),在屏幕上打印,没有换行

用户测试一下各个方法,很容易了解其用途。例如 sys.puts(sys.inspect(sys,false,null)); ,结果如下:

//输出结果
{
print:[Function],
puts:[Function],
debug:[Function],
error:[Function],
inspect:[Function],
p:[Function],
log:[Function],
exec:[Function],
inherits:[Function]
}

再回到 Eclipse 调试视图中。如下图所示即表明链接 nodejs 成功,可以进行相关的调试工作。

切换至 Project Explorer 标签页,这里列出了所有的 require() 包文件和n odejs.exe <文件名>所指定的主程序文件,都是 JavaScript(*.js)文件。

我们双击打开程序文件 dbgtest.js,即可打开源码:

在行数上方双击那一行,就是一个打点的工作(breakpoint),程序随即被挂起,暂停工作,调试器中显示当地变量等的信息供用户观察与进一步应用。如图我们在第8行打了一个点:

首次使用 Eclipse 的调试界面感觉可能有些别扭,这没有关系。如果不太习惯,使用多几次就好。调试的基本内容大抵是那几回事。例如,你可以步进跟踪代码(step into,快捷键 F5,但注意一点,对于步进 require 可能会 crash 挂掉,这也是情有可原的,require() 是加载包的特殊方法)。下图则是调出 watch 的功能。

当然,通过在 js 源码中加入 debugger 的关键字来打点也是支持的(debugger 非常有用的关键字!)。

function timer_tick() {
count++;
debugger;
sys.debug("计数器:" + count);
...........
}

恢复 nodejs 程序的运行,就要按 绿色的箭头来恢复,快捷键是 F8(现在处于暂停所以中间的按钮是灰色的)红色按钮就是断开链接。另外如果至于如何关闭 nodejs 进程?据作者惯用的方式,就是在 DOS/win 的命令行下 ctrl+c 强行退出即可。

前面不是说到 nodejs --debug-brk 另外一个的参数吗?究竟有何作用? --debug-brk 也是调试的命令,只是在一开始时就是挂起 nodejs 程序不运行,等待调试器通知才运行。——明显与 --debug 边运行代码边监听调试的不同。为了避免过多的钻“牛角尖”,还是让用户们自己来试试这个参数吧:)

前面说到调试界面不以独立的 C/C++ 程序提供,其实一方面可以很轻松地嫁接这个调试模块的到 C/C++ 项目中。因为属于高级话题的部分,限水平和能力的缘故就不展开讨论了(可留意一下 ry 原文)。

结语:有了 V8 和 Eclispe 远程调试的可靠保障,nodejs 的发展会越来越走向成熟,——最后,让我们投入到美丽的 SSJS (Server Side JavaScript)世界中去吧!

时间: 2024-08-02 23:05:57

学习NodeJS第三天:打造Nodejs的调试环境(中)的相关文章

学习NodeJS第三天:打造Nodejs的调试环境(上)

自从 NodeJS 问世以来,我们注意到的一个现象是,开源生态围绕 NodeJS 的扩展(Extends).插件(Plugins)或工具(Tools/Utilis)在不断地增多,可见当中之蓬勃.这一方面固然很好,但这里却不是重点讨论那些扩展或者插件,而是调试工具(debugger)本身.因为,没有一个调试工具,无法展开一丁点的开发工作,或者说困难重重.大家心知肚明,调试器自必然不可或缺.官方 nodejs.org 对调试器的态度也是不含糊的.原来,官方一早在 nodejs 内置了基于Eclips

学习NodeJS第二天:漫谈NodeJS

缘起-- 新型的服务端正在进入我们的视野,让我们投入了关注的目光,例如近来的 NodeJS 算比较抢眼的一员. 之所以创造 NodeJS ,引用原作者 Ryan 之语,目标是为了可以更轻松地编写具有可伸缩性的网络程序.咋一想,这样的目标作为网络开发人员们何曾不想拥有.--于是看看Nodejs 是怎么实现的.首先由浅入深说下简单的概念:无论是复杂的业务逻辑,还是简单的"HelloWorld"也罢,客户端发送链接过来,Web 服务器肯定要一一全单照收,不会拒"链接"于千

前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite

一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象,这意味着只有一个实例被创建过,服务使用AngularJS的依赖注入机制来定义和注册. 可以把服务注入模块.控制器和其它服务. 1.1.内置服务 常见的内置服务如下: $http 发送http请求 $resource 创建一个可以RESTful服务器端数据源交互对象 $window 浏览器的windo

WPS三步打造演示母版

  前几天小编一直在忙于制作各种PPT报告,转正的,总结的,计划的.最忍无可忍的就是机械的重复一个动作,给每张幻灯片插入背景和版式.相信很多网友也有同样的经历和感触.有幸得公司"高人"指点,用WPS演示三步打造统一母版,方便省时.小编按耐不住整理了几个步骤分享给大家. Step1:对于PPT而言,设置统一的母版首先要在演示中打开"视图"选项卡,并选中"幻灯片母版". Step2:右侧显示出当前的母版样式,要更改只需要选中这张幻灯片母版,右键选择&

Fireworks三帧打造酷Banner

充分利用Fireworks的功能,我们可以轻轻松松用三帧打造出一个酷酷的小Banner.具体制作方法如下. 1. 新建一个360*60的画布,并用矩形工具拉出一个与画布一样大小的矩形. 2. 把刚刚拉出的矩形的填充选为"波纹",并按下图设置. 3. 当你把填充模式改变后,会出现如图所示的控制手柄,调节成如图所示. 4. 可以加上你网站的名字,或是放一些素材来修饰一下. 5. 复制第1帧,在第1帧之后,这时创建了第2帧. 6. 把第2帧的矩形上的控制手柄按比例的拉长一点. 7. 在第2帧

WPS三步打造演示统一母版的几个步骤

      WPS三步打造演示统一母版的几个步骤       Step1:对于PPT而言,设置统一的母版首先要在演示中打开"视图"选项卡,并选中"幻灯片母版". Step2:右侧显示出当前的母版样式,要更改只需要选中这张幻灯片母版,右键选择"新标题母版". Step3:现在便可以随意的设置自己母版样式啦.如果是为公司制作PPT,可以在幻灯片中加入公司的logo和网址.所有你添加的内容(如字体字号.版式.背景)都设置完毕后,点击"幻灯片母

PPT达人速成记 WPS三步打造演示母版

前几天小编一直在忙于制作各种PPT报告,转正的,总结的,计划的.最忍无可忍的就是机械的重复一个动作,给每张幻灯片插入背景和版式.相信很多网友也有同样的经历和感触.有幸得公司"高人"指点,用WPS演示三步打造统一母版,方便省时.小编按耐不住整理了几个步骤分享给大家. Step1:对于PPT而言,设置统一的母版首先要在演示中打开"视图"选项卡,并选中"幻灯片母版". 图1 Step2:右侧显示出当前的母版样式,要更改只需要选中这张幻灯片母版,右键选择

拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历):说到底还是一个学习能力的问题.就这一点,从我的经历看来(曾到多家企业培训新人),培训出身的技术人员大体而言确实没有科班出身的学得更快准狠一些.学习能力这个东西其实比较虚,它并没有一个直观的考量方式,所以企业一般都会简单粗暴的使用学历.专业.项目经验来衡量.这之间反映了你的计算机知识框架是否完善.基

Jquery 学习笔记(三)240多个jQuery插件

Jquery 学习笔记(三) -240多个jQuery插件 2009年11月30日二 作者:   邦畿千里   概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架.其宗旨是-写更少的代码,做更多的事情.它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+). jQuery 是一个快速的,简洁的 javaScript