六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 1047|回复: 0

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

[复制链接]
 楼主| 发表于 2014-8-28 12:24:46 | 显示全部楼层 |阅读模式
2012-12-07 因追加《学习NodeJS第三天:打造Nodejs的调试环境(下)》的缘故,特此将原来的《下》篇改为《中》篇,如标题所示。
上一期我们为大家介绍了安装 Eclipse 调试插件的情况,这对于还不熟悉 Eclipse 开发平台的用户是至关重要的,希望可以通过一步步的图片加文字说明,把 Nodejs 困难的地方变简单和清晰、友好和轻松。
现在正式进入要调试程序肯定要有调试代码。下面就是我们第一个测试的代码,很小的行数:
  1. var sys = require('sys');
  2. // 此乃计数器变量,Suspend(中断挂起)期间可以观察该变量的变化。
  3. var count = 0;
  4. sys.debug("开始进行调试……");
  5. function timer_tick() {
  6.     count++;
  7.     sys.debug("计数器:" + count);
  8.     if (count === 10) {
  9.         count += 1000;
  10.         sys.debug("能在这里打点吗?错过10后不行啦");
  11.     }
  12.     setTimeout(timer_tick, 1000);
  13. }
  14. 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)); ,结果如下:
[javascript] view plaincopy

  • //输出结果   
  • {   
  •    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 非常有用的关键字!)。
[javascript] view plaincopy

  • 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 (ServerSideJavaScript)世界中去吧!
摘自:http://blog.csdn.net/zhangxin09/article/details/5911643



该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表