如何调试Node.js服务器应用程序?

现在,我主要使用如下打印语句的警报调试:

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

必须有更好的调试方法。我知道Google Chrome有一个命令行调试器。这个调试器也适用于Node.js吗?


当前回答

如果您使用的是Atom IDE,则可以安装节点调试器包。

其他回答

其他答案中没有提到的另一个选项是使用名为Rookout的工具。它用于从本地和远程应用程序调试和获取数据。我们在生产环境中使用它将数据聚合到其他服务中,这为我们省去了很多麻烦和硬编码日志记录

使用IDE

在WebStorm中,您只需打开package.json文件,然后从那里以DEBUG模式运行脚本。只需单击侧面的绿色播放按钮。

带有--检查

如果要在没有IDE的情况下直接从CLI调试应用程序,那么可以运行类似node index.js--inspect的脚本。默认情况下,它将侦听端口5858,允许您连接调试器。或者,您可以使用--inspect=55858指定不同的端口。

带有环境变量

创建一个脚本myInspector.js,如下所示:

let inspector = require("inspector");

// you could explicitly specify a port.
// or alternatively set it to 0 to get any available port.
const port = 0;
inspector.open(port, undefined, true);

// print the url which also reveals the port.
const url = inspector.url()
console.log(url);

设置环境变量NODE_OPTIONS=“--requiremyInspector.js”启动脚本。

事实上,这也是WebStorm注入检查器的方式。美妙之处在于,无论您使用哪种发射器,它都能正常工作。所以你可以跑。。。,节点ts。。。或者甚至使用一些.sh/.bat文件。

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

它可以在多个操作系统上运行,内置Node.js调试(以及大量其他功能)(http://www.jetbrains.com/webstorm/features/index.html).

我唯一的“问题”/愿望列表项目是:

在Mac上,它似乎比Windows更需要资源。在版本6中,它似乎不再是一个问题。如果它有Snippet支持(就像Sublime Text 2一样),那就太好了。比如,键入“fun”并点击“tab”以放入一个函数。请参阅下面的@WickyNilliams评论-使用Live模板,您也可以支持Snippet。

我创建了一个名为pry.js的小工具,可以帮助您解决问题。

将一个简单的语句放在代码中的某个地方,正常运行脚本,节点将停止当前线程,从而允许您访问所有变量和函数。随意查看/编辑/删除它们!

var 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()

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

除错记录

让我们面对现实吧,我们都喜欢一个好的console.log(“哦,如果你到了这里,你最好跑一下。”),有时候这很有用,所以如果你不想离开它太远,至少可以通过Visionmedia的调试为你的日志添加一些亮点。

交互式调试

尽管控制台日志记录非常方便,但要进行专业调试,您需要卷起袖子并陷入其中。设置断点,单步执行代码,检查范围和变量,以了解导致这种奇怪行为的原因。正如其他人所提到的,节点检查器实际上是蜜蜂的膝盖。它完成了内置调试器所能做的一切,但使用了熟悉的ChromeDevTools界面。如果像我一样使用Webstorm,那么这里有一个方便的调试指南。

堆栈跟踪

默认情况下,我们无法在事件循环的不同周期(滴答声)中跟踪一系列操作。要解决这个问题,请查看longjohn(但不在生产中!)。

内存渗漏体

使用Node.js,我们可以让服务器进程保持相当长的时间。如果你认为它引发了一些严重的泄漏,你该怎么办?使用heapdump和ChromeDevTools比较一些快照,看看有什么变化。


有关一些有用的文章,请查看

RisingStack-调试Node.js应用程序nearForm的David Mark Clements的优秀文章

如果你想看视频,那么

Netflix JS Talks-调试生产中的Node.JS跟踪工作组关于跟踪和调试node.js的有趣视频关于节点检查器的15分钟视频

无论您选择什么路径,只要确保您了解如何调试

这是一件痛苦的事看看你自己的麻烦你自己和其他人都没有成功索福克勒斯,阿贾克斯