我如何debuggingNode.js应用程序?

如何debuggingNode.js服务器应用程序?

现在我主要使用打印语句来进行警报debugging ,如下所示:

sys.puts(sys.inspect(someVariable)); 

必须有更好的debugging方法。 我知道Google Chrome有一个命令行debugging器。 这个debugging器是否也可用于Node.js?

节点检查员可以节省一天! 从任何支持WebSocket的浏览器使用它。 断点,分析器,活代码等…这真是太棒了。

安装它:

 npm install -g node-inspector 

然后运行:

 node-debug app.js 

debugging

  • Joyent的指南
  • debugging器
  • 节点检查器
  • Visual Studio代码
  • 云9
  • 括号

剖析

  1. node --prof ./app.js
  2. node --prof-process ./the-generated-log-file

Heapdumps

  • 使用Chrome开发人员工具的node-heapdump

Flamegraphs

  • 0X
  • jam3 / devtool然后Chrome开发者工具火焰图表
  • Dtrace和StackVis – 仅在SmartOS上受支持

追踪

  • 使用TraceGL交互式堆栈跟踪

logging

输出debugging信息的库

  • 毛虫
  • 曳光弹

增强堆栈跟踪信息的库

  • Longjohn

标杆

  • Apache Bench : ab -n 100000 -c 1 http://127.0.0.1:9778/
  • WRK

其他

  • 跟踪
  • 华帝
  • 开溜
  • Google追踪框架
  • 保罗爱尔兰的指南

遗产

这些用于工作,但不再维护或不再适用于现代节点版本。

作为Google Chrome Developer Tools一部分发布的V8debugging器可用于debuggingNode.js脚本。 在Node.js GitHub wiki中可以find关于如何工作的详细解释。

还有一个用Node.js自己写的命令行debugging器ndb 。

Node自己有6.3版本的GUIdebugging器(使用Chrome的DevTools)

节点内置GUI调试器

只要通过检查员标志,你就会得到一个检查员的URL:

 node --inspect server.js 

您也可以通过传递--inspect-brk来打破第一行。

要自动打开Chrome窗口,请使用检查处理模块。

 # install inspect-process globally npm install -g inspect-process # start the debugger with inspect inspect script.js 

Node.js版本0.3.4+具有内置的debugging支持。

node debug script.js

手册: http : //nodejs.org/api/debugger.html

我个人使用JetBrains WebStorm,因为它是我发现的唯一的JavaScript IDE,对于前端和后端JavaScript都是非常好的。

它适用于多个操作系统,并有Node.jsdebugging内置(以及其他许多东西)( http://www.jetbrains.com/webstorm/features/index.html )。

我唯一的“问题”/愿望清单项目

  1. 在Mac上,这似乎比Windows更耗资源 它在版本6中不再是一个问题。
  2. 如果它有Snippet支持(比如Sublime Text 2的那些支持),也就是input'fun',然后点击'tab'来放入一个函数。 请参阅下面的@WickyNilliams评论 – 使用实时模板,您也有片段支持。

Visual Studio代码将是我的selectdebugging。 没有安装任何工具或npm install东西的开销。 只需在package.json中设置应用程序的起点,VSCode就会自动在您的解决scheme中创build一个configuration文件。 它build立在Electron上,像Atom这样的编辑器就是在这个基础上构build的。

VS Code提供了类似于VS,Eclipse等其他IDE中的debugging体验

在这里输入图像描述 在这里输入图像描述

Theseus是Adobe研究的一个项目,它可以让你在他们的开源编辑器中debugging你的Node.js代码。 它具有一些有趣的function,如实时代码覆盖,追溯检查,asynchronous调用树。

截图

这里有很多很好的答案,但我想补充一下我的观点(根据我的方法演变而来)

debugging日志

让我们面对现实,我们都喜欢一个好的console.log('Uh oh, if you reached here, you better run.') ,有时候效果很好,所以如果你不愿离开它太远,至less添加Visionmedia的一些debuggingfunction可以让您的日志更加stream畅 。

交互式debugging

像控制台日志logging一样方便,要专业debugging,你需要卷起袖子并卡住。设置断点,遍历你的代码,检查范围和variables,看看是什么造成了怪异的行为。 正如其他人所说, 节点检查员真的是蜜蜂。 它可以使用内置的debugging器完成所有工作,但使用熟悉的Chrome DevTools界面。 如果像我一样使用Webstorm ,那么这里有一个方便的指导来从那里进行debugging。

堆栈跟踪

默认情况下,我们不能跟踪事件循环的不同周期(ticks)的一系列操作。 为了解决这个问题,看看longjohn (但不是在制作!)。

内存泄漏

通过Node.js,我们可以让服务器进程保持相当长的时间。 如果你认为它出现了一些令人讨厌的泄漏,你会怎么做? 使用heapdump和Chrome DevTools来比较一些快照,看看有什么变化。


对于一些有用的文章,退房

  • RisingStack – debuggingNode.js应用程序
  • 由nearForm的David Mark Clements撰写的优秀文章

如果你喜欢看video,那么

  • Netflix JS会谈 – 在生产环境中debuggingNode.js
  • 来自跟踪工作组的 有趣的video ,用于跟踪和debuggingnode.js
  • 真正的信息15分钟video节点检查

无论你select什么path,只要确保你了解你如何debugging

在这里输入图像描述

这是一件痛苦的事情
看看你自己的麻烦,知道
你自己和别人都没有做到这一点

索福克勒斯,阿贾克斯

适用于Visual Studio 2012或2013的Node.js工具包含一个debugging器。 此处的概述指出:“用于Visual Studio的Node.js工具包括对debugging节点应用程序的全面支持。” 作为Node.js的新手,但是在.NET中有一个背景,我发现这是一个debuggingNode.js应用程序的好方法。

Visual Studio Code有非常好的Node.jsdebugging支持。 它是免费的,开源的和跨平台的,可以在Linux,OS X和Windows上运行。

你甚至可以debugging咕噜和吞咽任务 ,如果你需要…

我写了一个不同的方法来debuggingNode.js代码,它是稳定的,非常简单。 它可以在https://github.com/sa/iron-node获得; 。

在这里输入图像说明

一个开源的跨平台可视化debugging器。

安装:

npm install iron-node -g;

debugging:

iron-node yourscript.js;

如果您正在使用Atom IDE ,则可以安装node-debugger软件包。

我创build了一个名为pry.js的小工具,可以帮助你。

在你的代码的某处放一个简单的语句,正常运行你的脚本,节点将暂停当前线程,让你访问所有的variables和函数。 查看/编辑/删除他们的意愿!

 pry = require('pryjs') class FizzBuzz run: -> for i in [1..100] output = '' eval(pry.it) # magic output += "Fizz" if i % 3 is 0 output += "Buzz" if i % 5 is 0 console.log output || i bar: -> 10 fizz = new FizzBuzz() fizz.run() 

对于那些不确定从哪里开始的人,我使用节点检查器对Node.js进行了简短的debugging 。

Node.js中内置了命令行debugging器客户端 。 云9 IDE也有相当不错的(可视) debugging器 。

如果你需要一个function强大的Node.js日志库, Tracer https://github.com/baryon/tracer是一个更好的select。;

它输出日志信息,包括时间戳,文件名,方法名称,行号,path或调用堆栈,支持颜色控制台,并支持数据库,文件,stream传输。 我是作者。

假设您的计算机上安装了节点检查器(如果没有,只需input“npm install -g node-inspector”),您只需运行:

 node-inspector & node --debug-brk scriptFileName.js 

并将命令行中的URI粘贴到WebKit(Chrome / Safari)浏览器中。

只是为了完整:

PyCharm 3.0 + Node.js插件提供了一个非常棒的开发+运行+debugging体验 。

有新的开源的Nodeclipse项目(作为Eclipse插件或Enide Studio ):

http://www.nodeclipse.org/img/Nodeclipse-1-debugging.png

Nodeclipse在2013年的Eclipse Top 10新插件中成为第一名。 它使用了一个经过修改的V8debugging器(来自Google Chrome Developer Tools for Java)。

Nodeclipse是每个月初发布的免费开源软件。

使用Webstorm! 它非常适合debuggingNode.js应用程序。 它有一个内置的debugging器。 看看这里的文档: https : //www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html

IntelliJ对于Node.js来说非常有效

另外,IntelliJ支持“Code Assistance”。

使用您最喜欢的浏览器debugging器来debugging小型Node.js脚本的一种快捷方式是使用browserify 。 请注意,这种方法不适用于任何需要本地I / O库的应用程序,但对于大多数小型脚本来说已经足够了。

 $ npm install -g browserify 

现在将所有的var x = requires('x')调用移动到一个requires.js文件中并运行:

 $ browserify requires.js -s window -o bundle.js 

(这里的缺点是你必须移动或注释所有文件中的需求。)

bundle.js包含在HTML文件中,如下所示:

 <script type="text/javascript" src="bundle.js"></script> 

现在在浏览器中加载文件,然后按F12和中提示:在浏览器中debugging。

NetBeans IDE从版本8.1开始支持Node.js:

<…>

新function亮点

Node.js应用程序开发

  • 新的Node.js项目向导
  • 新的Node.js快速向导
  • 增强的JavaScript编辑器
  • 运行Node.js应用程序的新支持
  • debuggingNode.js应用程序的新支持。

<…>

其他参考:

  1. NetBeans Wiki / NewAndNoteworthyNB81 。
  2. NetBeans IDE中的Node.js Express App,Geertjan-Oracle 。

有很多可能性…

  • 节点包含一个debugging工具
  • 节点检查
  • 代码编辑器/ IDE(请参阅以下其中一个的debugging说明)
    • primefaces ,
    • VSCode
    • Webstorm
    • 和更多

debugging支持通常使用v8debugging协议或更新版本的Chromedebugging协议来实现 。

 node-debug -p 8888 scriptFileName.js 

我会用沃尔玛实验室的GOOD 。 它会做这个工作,而且非常灵活:

 var hapi = require('hapi'); var good = require('good'); var server = hapi.createServer('localhost', 5000,{}); server.route({SOME ROUTE HERE}); server.start(); var options = { subscribers: { 'console': ['ops', 'request', 'log', 'error'], 'http://localhost/logs': ['log'] } }; server.pack.require('good', options, function (err) { if (!err) { console.log('Plugin loaded successfully'); } }); 

Visual Studio代码将在我们的debugging工作。