Nodejs调试技术总结

来源:互联网 发布:高中化学视频软件 编辑:程序博客网 时间:2024/06/05 20:14

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

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

复制代码
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内建的调试器

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

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

执行命令:node debug example.js 就可以进入调试模式。

在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, version

 

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

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

然后重新编译Nodejs。

提示:

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

 

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的方式。

 

-----------------------------------------------------------------------

断点调试你的express项目

来源:网络整理     时间:2016-1-16 23:03:39     关键词:
<iframe id="iframeu2324488_0" src="http://pos.baidu.com/xcum?rdid=2324488&amp;dc=2&amp;di=u2324488&amp;dri=0&amp;dis=0&amp;dai=8&amp;ps=404x503&amp;dcb=BAIDU_SSP_define&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1470327054150&amp;ti=%E6%96%AD%E7%82%B9%E8%B0%83%E8%AF%95%E4%BD%A0%E7%9A%84express%E9%A1%B9%E7%9B%AE_Javascript%E6%95%99%E7%A8%8B_%E7%BD%91%E9%A1%B5%E5%88%B6%E4%BD%9C_%E7%A0%81%E8%9A%81%E4%B9%8B%E5%AE%B6&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1349x667&amp;pss=1349x1294&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1470327058&amp;rw=667&amp;ltu=http%3A%2F%2Fwww.codes51.com%2Farticle%2Fdetail_290960.html&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D5vURMRtRBgvqdk_ok1RRjRasABCBjD4PVB5qc3nPJIBoHmFqW1uFIgAEgDbjNM_0BGPBpBADzLsMrG6ixXMMt_%26wd%3D%26eqid%3Dcf6f331c000436380000000257a3690e&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=6&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1470327055&amp;qn=4ce2e39267f77d78&amp;tt=1470327054083.427.643.644" width="550" height="22" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>

本篇文章主要介绍了"断点调试你的express项目",主要涉及到方面的内容,对于Javascript教程感兴趣的同学可以参考一下: 写在前面前端工程师接触最多的是JavaScript,JavaScript程序可以通过浏览器进行调试,比如chrome的调试工具、Firefox的FireBug等...

  • <iframe id="iframeu2029198_0" src="http://pos.baidu.com/xcum?rdid=2029198&amp;dc=2&amp;di=u2029198&amp;dri=0&amp;dis=0&amp;dai=9&amp;ps=544x510&amp;dcb=BAIDU_SSP_define&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1470327054150&amp;ti=%E6%96%AD%E7%82%B9%E8%B0%83%E8%AF%95%E4%BD%A0%E7%9A%84express%E9%A1%B9%E7%9B%AE_Javascript%E6%95%99%E7%A8%8B_%E7%BD%91%E9%A1%B5%E5%88%B6%E4%BD%9C_%E7%A0%81%E8%9A%81%E4%B9%8B%E5%AE%B6&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1349x667&amp;pss=1349x1294&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1470327058&amp;rw=667&amp;ltu=http%3A%2F%2Fwww.codes51.com%2Farticle%2Fdetail_290960.html&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D5vURMRtRBgvqdk_ok1RRjRasABCBjD4PVB5qc3nPJIBoHmFqW1uFIgAEgDbjNM_0BGPBpBADzLsMrG6ixXMMt_%26wd%3D%26eqid%3Dcf6f331c000436380000000257a3690e&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=6&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1470327055&amp;qn=f550ab4132f144bd&amp;tt=1470327054083.448.692.693" width="300" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>
  • <iframe id="iframeu2657457_0" src="http://pos.baidu.com/xcum?rdid=2657457&amp;dc=2&amp;di=u2657457&amp;dri=0&amp;dis=0&amp;dai=10&amp;ps=544x510&amp;dcb=BAIDU_SSP_define&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1470327054150&amp;ti=%E6%96%AD%E7%82%B9%E8%B0%83%E8%AF%95%E4%BD%A0%E7%9A%84express%E9%A1%B9%E7%9B%AE_Javascript%E6%95%99%E7%A8%8B_%E7%BD%91%E9%A1%B5%E5%88%B6%E4%BD%9C_%E7%A0%81%E8%9A%81%E4%B9%8B%E5%AE%B6&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1349x667&amp;pss=1349x1294&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1470327058&amp;rw=667&amp;ltu=http%3A%2F%2Fwww.codes51.com%2Farticle%2Fdetail_290960.html&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D5vURMRtRBgvqdk_ok1RRjRasABCBjD4PVB5qc3nPJIBoHmFqW1uFIgAEgDbjNM_0BGPBpBADzLsMrG6ixXMMt_%26wd%3D%26eqid%3Dcf6f331c000436380000000257a3690e&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=6&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1470327055&amp;qn=da0524666041a29e&amp;tt=1470327054083.452.695.696" width="300" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>

写在前面

前端工程师接触最多的是JavaScript,JavaScript程序可以通过浏览器进行调试,比如chrome的调试工具、Firefox的FireBug等。现在大前端趋势下前端工程师开始接触NodeJS这个JavaScript的孪生兄弟,俗话说殊途同归,NodeJS当然也可以通过chrome的调试工具进行断点调试。这篇文章着重介绍一下这个技术。

node-inspector

全局安装node-inspector

执行这一步之前请确保已成功安装NodeJS环境,然后执行如下代码安装 node-inspector模块。

npm install -g node-inspector

以debug模式开启express服务

我的Node项目习惯用express搭建,然后用supervisor自动监听改动并重启服务。如果对这个模式不太了解,请用力戳 这里 。

supervisor--debug./bin/www

断点调试你的express项目

启动node-inspector

接着再打开一个命令窗口,执行下面的命令

node-inspector&

断点调试你的express项目

这样 node-inspector服务就启动了,打开chrome浏览器(或者chrome内核的浏览器),输入

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

注意 如果不想默认监听8080端口,可以手动设置端口号,比如

node-inspector&-p8888

调试NodeJS程序

接下来我们就可以 在chrome里 像之前调试 JavaScript一样 调试我们的NodeJS程序了

断点调试你的express项目

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); });

    以上就介绍了断点调试你的express项目,包括了方面的内容,希望对Javascript教程有兴趣的朋友有所帮助。

    本文网址链接:http://www.codes51.com/article/detail_290960.html

  • 接着在chrome中再打开一个页签,打开你需要调试的页面。执行你需要的操作,当执行到设置断点的时候,页面会暂停加载,点击回到原来的node-inspector页面,可以看到调试的信息。

    0 0