[转]欲善其功,必先利其器--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的方式。

时间: 2024-11-05 20:24:54

[转]欲善其功,必先利其器--Nodejs调试技术总结的相关文章

欲善其事必先利其器---Xcode插件

Xcode所有的插件都安装在目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ Alcatraz (用于管理xcode插件.管理Xcode工程模版以及颜色配置的功能) Quick Start: 1 mkdir -p ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins; 2 curl -L http://git.io/lOQWeA |tar xvz

Nodejs调试技术总结

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

java与UML-1-工欲善其事必先利其器

众所周知,Java是世界上最流行的语言,其特性:解释型语言,面向对象等,在开发中,软件工程的思想,将重于语言的应用.在我之前的学习中,走了很多的弯路,看到的每一本书,要么是Java开发的,要么是软件工程的,没有两者结合起来的,其实两者结合的教学,将更有助于我们理解java语言,尤其是其全面面向对象的思想. 我们需要注意的是:面向对象,是一种思想,类似我们接触过的哲学.是一种高大上的东西,Java是根据这一思想而开发的一种编程语言,事实上,网络上所有的书籍,很少讲到面向对象,基本讲面向对象都是基于

欲善其工必先利其器-----ThinkPad E430加装SSD固态硬盘和内存

大概13年5月左右入手的小黑ThinkPad E430 当时辞职换工作换城市所以预算有限,4k左右大洋买下了这款笔记本电脑.3年左右的时间,一直使用单位电脑,偶尔使用小黑真心崩溃.你会发现你会有放弃使用电脑的冲动.一直犹豫是要换一个MAC还是给小黑升级:前天使用过程中马上决定给小黑升级.立即在京东下单,晚上进行改装,安装全部程序:两天的体验那是相当的爽啊!闲话少叙,进入正题: 小黑升级方案(适用于大部分笔记本): 1.只买一个Msata SSD插在笔记本预留的位置即可: 2.将原来的机械硬盘拆下

猿欲善其事必先利其IDE-Intellij IDEA

猿欲善其事必先利其IDE-Intellij IDEA 如果说金钱是商品的价值尺度,那么时间就是效率的价值尺度.因此对于一个办事缺乏效率者,必将为此付出高昂代价.--培根 之前同事一直给我推荐IDEA,说跟eclipse相比就是石器时代的工具,我一直任何一个工具熟练起来都很牛逼,所以一直坚持使用eclipse,不过看了下IDEA的功能,有几点比较吸引我,1可以全键盘操作,2双栏显示,3多窗口显示,4插件集成要比eclipse方便 ,5界面很漂亮.所以还是决定去尝试下IDEA,如果真的有那么好用,可

nodejs 学习二, nodejs调试

nodejs 调试,在官方文档(英文),常用的两种: 一个在chrome安装插件inspector 第二种利用编辑 这里我使用vscode编辑来调试. 主要是配置 launch.json(用vscode打开项目是,会生成.vscode文件,launch.json就在里面), launch.json配置如下: { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?

使用supervisor提高nodejs调试效率

如果你有PHP 开发经验,会习惯在修改PHP 脚本后直接刷新浏览器以观察结果,而你 在开发Node.js 实现的HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止 Node.js 再重新运行才会奏效.这是因为Node.js 只有在第一次引用到某部份时才会去解析脚 本文件,以后都会直接访问内存,避免重复载入,而PHP 则总是重新读取并解析脚本(如 果没有专门的优化配置).Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因 为我们在开发过程中总是希望修改后立即看到效果,而不

工欲利其事必先利其器——Eclipse最常用的49个快捷键

虽然我的题目是”工欲利其事必先利其器“,但今天我们在这里先不讨论到底是Eclipse好用还是IDEA牛逼,我今天只在这里给大家介绍一下Eclipse上最常用的49个快捷键,掌握住这些快捷键,能够大大提高开发效率.强烈推荐新手在刚用编译器时,就要对这些快捷键有所了解.话不多说,学习起来吧. /* 快捷键的使用:第一部分 0 执行(run) alt+r(F11) 1 提示补全 alt+/ 2 单行注释 ctrl+/ 3 多行注释 ctrl+shift+/ 4 向下复制一行 ctrl+alt+down

嵌入式Linux的调试技术

嵌入式Linux的调试技术对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点.逐步跟踪代码.输出调试信息等. Printk函数的用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间.也就是说,像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息.Printk函数在printk.c文件中实现. 虽然使用printk函数可以很方便的将消息写入日志文件或控制台.但大量使用printk函数频繁操作日