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

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

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

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

该段代码是最简单清晰不过的了,就是通过一个 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)); ,结果如下:

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

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

files

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

source

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

breakpoint

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

watch

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


恢复 nodejs 程序的运行,就要按play 绿色的箭头来恢复,快捷键是 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)世界中去吧!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sp42a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值