nodejs调试 欲善其功,必先利其器--Nodejs调试技术总结

欲善其功,必先利其器--Nodejs调试技术总结

 

调试技术与开发技术构成了软件开发的基石。目前Nodejs做为新型的Web Server开发栈倍受开发者关注。总的来讲Nodejs的应用程序主要有两部分:JavaScript编写的js模块和C语言编译的二进制模块。这里主要介绍三种avaScript模块的调试方法:基于Nodejs内建的调试器,基于V8调试插件和基于Chrome浏览器的调试器。如下全部的操做都将基于以下代码(example.js):html

复制代码
var http = require('http');
var url = require('url');
http.createServer(function (req, res) {
var path = url.parse(req.url).pathname;
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(path);
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
复制代码

 

1. 基于Nodejs内建的调试器node

Nodejs提供了一个内建调试器来帮助开发者调试应用程序。想要开启调试器咱们须要在代码中加入debugger标签,当Nodejs执行到debugger标签时会自动暂停(debugger标签至关于在代码中开启一个断点)。代码以下:web

var path = url.parse(req.url).pathname;
debugger;
res.writeHead(200, {'Content-Type': 'text/plain'});

执行命令:node debug example.js 就能够进入调试模式。npm

在debug模式下,可使用内建命令如repl去评估变量和表达式的值(如2所示)。咱们也能够经过help命令来获取完整的调试命令列表。浏览器

Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),
watch, unwatch, watchers, repl, restart, kill, list, scripts, breakpoints, versionwebsocket

 

2. 基于V8插件的调试器
Nodejs是基于google V8的引擎上构建的,Google为Eclipse提供了一个对应的调试插件。关于如何在Eclipse中安装和调试Nodejs程序就再也不重复描述了,网上已经有不少的文章了(具体能够参考这篇文章http://cnodejs.org/blog/?p=911)。惟一要注意的是在默认状况下V8引擎支持的调试模式是本地模式。若是想要开启远程调试的话,咱们须要修改Nodejs中的V8源文件:/deps/v8/src/platform-posix.ccsocket

  addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); --> INADDR_ANY
addr.sin_port = htons(port);

而后从新编译Nodejs。post

提示:ui

用插件来调试nodejs程序,你有时候会遇到什么connect refuse, get version failed等等错误。那么请注意你使用的ip的地址, 通常下127.0.0.1的回环地址是都工做的。若是你使用真实的ip地址,请检查防火墙设置。google

 

3. 基于Chrome浏览器的调试器

既然咱们能够经过V8的调试插件来调试,那是否也能够借用Chrome浏览器的JavaScript调试器来调试呢?node-inspector模块提供了这样一种可能。咱们须要先经过npm来安装node-inspector

npm install -g node-inspector  // -g 导入安装路径到环境变量

node-inspector是经过websocket方式来转向debug输入输出的。所以,咱们在调试前要先启动node-inspector来监听Nodejs的debug调试端口。

默认状况下node-inspector的端口是8080,能够经过参数--web-port=[port]来设置端口。在启动node-inpspector以后,咱们能够经过--debug或--debug-brk来启动nodejs程序。经过在浏览器输入http://[ip address]:8080/debug?port=5858,咱们会获得以下的调试窗口:

 这三种方法各自有优缺点,我我的比较欣赏node-inspector的方式。

相关文章
相关标签/搜索