nodejs调试工具node-inspector入门随笔

最近打算玩玩node。

众所周知,在前端,调试代码有一众天然好工具——浏览器!特别是 chrome,使得 jser 们如鱼得水,玩得风生水起。但是到了node,情况就不一样了,js 代码不再运行在单纯的浏览器中,而是直接运行在操作系统里,摇身一变成为了一等公民。从此,这node下的js与浏览器就不再是难兄难弟分不开,而是牛郎与织女,中间隔着一条大银河!

几年前有同事使用nodejs写了一个邮件服务反向代理,做一些分发和细微处理。用户量不大也不小,但是经常crash。好在node事件机制比较完善,down掉之后能及时重启,所以用起来效果还挺不错。当时同事调试代码主要用node-webkit,我也试用过,挺不错!就好像在浏览器中调试一样,而且可以读写文件,做一等编程语言公民才能做的事,很开生!

最近看到有同事使用node-inspector调试,熟悉的界面,跟node-webkit差不多。不过我想既然有node-webkit了,又出个node-inspector,肯定有不一样的地方!抱着这样的好奇心,我开始了折腾node-inspector。

由于是用mac办公,电脑上有现成的node。只需要 homebrew install node-inspector,啪……不一会儿就装好了。node-inspector -v,啪!v.0.12.4。然后就是例行的hello world!,如下:

 1 var http = require(\'http\');
 2 var port = 8080;
 3 var fs = require(\'fs\');
 4 
 5 http.createServer(function (req, res) {
 6     res.writeHead(200, {\'Content-Type\': \'text/plain\'});
 7     res.end(\'Hello World\n\');
 8 }).listen(port, \'127.0.0.1\');
 9 
10 
11 console.log(\'Server running at http://127.0.0.1:\' + port + \'/\');

感觉很不错,按说明,先执行

$ node-inspector

再执行

$ node --debug-brk server.js

按照上面执行 node-inspector 的说明,在浏览器中打开

http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858

执行调试。复制粘贴啪!GOOD!调试界面出来了,很顺利。

兴奋之余,不由自主地刷新了几次浏览器,一闪……一闪……一闪,终究是没有闪出来,页面一片空白!

很伤心!我觉得可能是端口被别的程序给占用了,用tcp命令查看,发现没有程序占用啊。打开浏览器开发工具,发现了几处错误,是跟RunTime……相关的问题,于是把错误复制狠狠google。果不其然,网上早已有同行在讨论这个错误了!

有的是把浏览器的一些个扩展禁用掉就好了

有的是把chrome用一些控制参数(太复杂也不知道怎么弄)启动就好

有的说node和node-inspector的版本不对

更有甚者,说homebrew安装的可能和npm安装的不同……

我一一试验,没有一个成功的。把同事电脑上的node-inspector拷贝过来,同样也不行。再后来我精疲力竭,就搁置了。

与这样好一个调试工具无缘,我是坚决不允许这种情况发生的!

于是今天晚上我又开始了折腾。重启几次之后,发现每次重启之后第一次在浏览器中打开是可以的,但是往后就不行。这一次,我是清醒的!于是我琢磨换个端口,有可能跟node-inspector的8080冲突了。于是我改成如下:

var http = require(\'http\');
var port = 8000;
var fs = require(\'fs\');

http.createServer(function (req, res) {
    res.writeHead(200, {\'Content-Type\': \'text/plain\'});
    res.end(\'Hello World\n\');
}).listen(port, \'127.0.0.1\');


console.log(\'Server running at http://127.0.0.1:\' + port + \'/\');

停止sever再启动,刷新浏览器。第一次像往前一样是成功的,刷新,nice!总算成功了!暂时还不清楚深层次的原因,夜深了就改天再研究了!在这里记录下这一激动人心的时刻!