学习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)下呢?留意一下debugView是否被选中即可,在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)); ,结果如下:

  1. //输出结果    
  2. {   
  3.    print:[Function],   
  4.    puts:[Function],   
  5.    debug:[Function],   
  6.    error:[Function],   
  7.    inspect:[Function],   
  8.    p:[Function],   
  9.    log:[Function],   
  10.    exec:[Function],   
  11.    inherits:[Function]   
  12. }   

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

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

files

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

source

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

breakpoint

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

watch

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

  1. function timer_tick() {  
  2.     count++;  
  3.     debugger;  
  4.     sys.debug("计数器:" + count);  
  5.     ...........  
  6. }  
恢复nodejs程序的运行,就要按play 绿色的箭头来恢复,快捷键是F8;(现在处于暂停所以中间的按钮是灰色;)红色按钮就是断开链接。另外如果至于如何关闭nodejs进程?据作者惯用的方式,就是在dos/win的命令行下ctrl+c强行退出即可。

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

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

结语:有了V8和Eclispe远程调试的可靠保障,nodejs的发展会越来越体现成熟,——让我们投入到美丽的SSJS世界中去吧!


阅读更多
个人分类: javascript
上一篇学习NodeJS第三天:打造Nodejs的调试环境(上)
下一篇学习NodeJS第四天:初始化nodejs的历险之旅(上)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭