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

Fab*_*obs 1531 javascript debugging node.js google-chrome-devtools

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

现在我主要使用这样的打印语句进行警报调试:

sys.puts(sys.inspect(someVariable));
Run Code Online (Sandbox Code Playgroud)

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

dar*_*hus 1251

节点检查员可以节省一天!在任何支持WebSocket的浏览器中使用它.断点,分析器,实时编码等......真的很棒.

安装它:

npm install -g node-inspector
Run Code Online (Sandbox Code Playgroud)

然后运行:

node-debug app.js
Run Code Online (Sandbox Code Playgroud)

  • 现在,检查员现在由StrongLoop积极维护,并再次使用最新版本(0.3)!公告在这里:http://blog.strongloop.com/announcing-a-new-and-improved-node-js-debugger/ (34认同)
  • *"从版本6.3开始,Node.js提供了一个基于DevTools的buit-in调试器,它主要弃用了Node Inspector,参见[此博客文章](https://medium.com/@paul_irish/debugging-node-js-nightlies -with-chrome-devtools-7c4a1b95ae27)开始使用内置调试器由V8/Chromium团队直接开发,并提供某些高级功能(例如长/异步堆栈跟踪),这些功能在Node Inspector中难以实现. "* - 表示节点检查员回购 (21认同)
  • 希望节点检查员处于活动状态.分析组件需要得到一些爱. (14认同)
  • 对我来说不幸的是,node-inspector不能使用最新版本的Node.js,并且自v0.1起它不支持登录到浏览器控制台.node-codein只是马车.因此,我编写了自己的模块来帮助调试,允许您将对象转储到Web浏览器控制台.我认为它可能对其他人有用:[node-monkey](https://github.com/jwarkentin/node-monkey).此外,它适用于Firefox和Chrome. (13认同)
  • 由于这是一个显然令人惊讶和流行的工具,原作者已经承认他们不再拥有维护它的资源这一事实肯定不会成为一个问题,因为开源社区可以把它拿起来? (7认同)
  • 对于大多数人提出这个问题,包括OP,这个答案应该是公认的答案.它是"警报 - 调试"的一个出色的替代品,我用它做了很多成功:D (3认同)
  • 从Node 6.3开始,内置节点检查员,详情请参阅我的答案...... (3认同)

bal*_*ton 733

调试

剖析

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

Heapdumps

Flamegraphs

追踪

记录

输出调试信息的库

增强堆栈跟踪信息的库

标杆

其他

遗产

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

  • 关于Nodetime:对于那些不想将数据发送到nodetime服务器的人,有一个本地"替代"(它仍然基于nodetime),`look`模块,如http://stackoverflow.com/questions中所述/ 12864221 /的NodeJS存储器概要分析 (8认同)

Fab*_*obs 248

作为Google Chrome开发人员工具的一部分发布的V8调试器可用于调试Node.js脚本.可以在Node.js GitHub wiki中找到有关其工作原理的详细说明.

  • 我很感兴趣,在Google IO的演示之后,Paul Irish和Pavel做了,现在可以直接调试node.js而不需要eclipse吗? (12认同)

Ali*_*ter 180

从版本6.3开始,Node有自己的内置 GUI调试器(使用Chrome的DevTools)

节点内置GUI调试器

只需传递检查员标志,您将获得检查员的URL:

node --inspect server.js
Run Code Online (Sandbox Code Playgroud)

你也可以通过传球--inspect-brk来打破第一线.

要自动打开Chrome窗口,请使用inspect-process模块.

node --inspect server.js
Run Code Online (Sandbox Code Playgroud)

  • 万一它可以帮助任何人,我在https://youtu.be/rtZKUnks6jI上发布了一个解释这个过程的视频. (3认同)
  • 不要忽视上面的步骤,只是为了分享...我试图创建一个更强大,更容易安装的包装器.请参阅:https://github.com/jaridmargolin/inspect-process (2认同)
  • 这个答案目前处于最底层,它是唯一一个真正适合我的答案.这真是太棒了! (2认同)
  • 你在哪里获得了Chrome开发者工具的黑暗主题? (2认同)

Jul*_*anW 91

Node.js版本0.3.4+具有内置调试支持.

node debug script.js

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

  • 您可能必须将`--debug`更改为`debug`而不使用破折号.这就是我最终让它发挥作用的方式.令人困惑的是,`--debug`和`debug`做了两件不同的事情. (6认同)
  • 我没有任何文档.刚更新到v0.3.5.放一行"调试器"; 在你的代码中,它将充当断点.它的工作方式类似于ndb/gdb.在你做"node debug script.js"后输入help.你会看到它支持的命令.p = print,l = list ...所以你不需要输入完整的世界 (2认同)
  • 请注意,在Windows下它是"node.exe --debug myscript.js",但它仍然无法正常工作. (2认同)

Shr*_*yas 68

Visual Studio Code将是我调试的选择.没有安装任何工具或npm install东西的开销.只需在package.json中设置应用程序的起点,VSCode将自动在您的解决方案中创建配置文件.它以Electron为基础,构建了像Atom这样的编辑器.

VS Code提供了与VS,Eclipse等其他IDE相似的调试体验.

在此输入图像描述 在此输入图像描述

  • 但是sublime没有调试器,我认为VS代码也很快 (3认同)

isN*_*247 57

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

它适用于多个操作系统,内置Node.js调试(以及其他大量内容)(http://www.jetbrains.com/webstorm/features/index.html).

我唯一的"问题"/愿望清单项目 :

  1. 它似乎在Mac上比Windows更耗资源 它在版本6中似乎不再是问题.
  2. 如果它具有Snippet支持(如Sublime Text 2的那些- 即输入'fun'并点击'tab'以放入一个函数,那就太好了. 请参阅下面的@WickyNilliams评论 - 使用实时模板,您还可以获得代码段支持.

  • webstorm确实有片段支持BTW ;-)尽管它们被称为"实时模板"而不是片段. (10认同)
  • 如果您只想调试node.js应用程序并且已经拥有Intellij IDEA许可证,则只需安装node.js插件,而无需购买WebStorm许可证.安装插件后,设置运行/调试配置非常容易. (3认同)

Sin*_*hus 41

Theseus是Adobe研究的一个项目,它允许您在其开源编辑器Brackets中调试Node.js代码.它具有一些有趣的功能,如实时代码覆盖,追溯检查,异步调用树.

截图


Phi*_*ien 41

这里有很多很棒的答案,但我想添加我的观点(基于我的方法如何演变)

调试日志

让我们面对它,我们都喜欢一个好的console.log('Uh oh, if you reached here, you better run.'),有时候它会很好用,所以如果你不愿意离它太远,至少可以通过Visionmedia的调试为你的日志添加一些金光闪闪.

交互式调试

像控制台日志记录一样方便,为了专业调试,你需要卷起袖子并陷入困境.设置断点,逐步执行代码,检查范围和变量,看看是什么导致了这种奇怪的行为.正如其他人所提到的,节点检查员确实是蜜蜂膝盖.它可以使用内置调试器完成所有操作,但使用熟悉的Chrome DevTools界面.如果像我一样使用Webstorm,那么这里有一个方便的调试指南.

堆栈痕迹

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

内存泄漏

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


对于一些有用的文章,请查看

如果你想观看视频那么

无论您选择哪种方式,只需确保了解调试方式

在此输入图像描述


看看你自己的麻烦并知道
你自己而没有其他人做过这 件事是一件痛苦的事

索福克勒斯,阿贾克斯


Joh*_*n81 25

Visual Studio 2012或2013的Node.js工具包括一个调试器.这里的概述声明"用于Visual Studio的Node.js工具包括对调试节点应用程序的完全支持." 作为Node.js的新手,但有.NET背景,我发现这是一个调试Node.js应用程序的好方法.


han*_*ans 23

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

如果需要,你甚至可以调试grunt和gulp任务 ......


Ste*_*hlf 22

我写了一个不同的方法来调试Node.js代码,这个代码很稳定且非常简单.它可以在https://github.com/sa/iron-node上找到.

在此输入图像描述

一个开源的跨平台可视化调试器.

安装:

npm install iron-node -g;

调试:

iron-node yourscript.js;


Uch*_*chi 15

如果您使用的是Atom IDE,则可以安装该node-debugger软件包.


bab*_*idi 13

使用Chrome版本67.0.3396.62(+)

  1. 运行节点应用

node --inspect-brk = 0.0.0.0:9229 server.js(server js filename)

  1. 用chrome浏览你的应用程序,例如"localhost:port"
  2. 打开DevTools.
  3. 单击响应设备图标旁边的节点图标.

在此输入图像描述

将会有另一个DevTools窗口专门用于调试节点应用程序.

在此输入图像描述


Bla*_*ine 12

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

在代码中的某处放置一个简单的语句,正常运行脚本,节点将暂停当前线程,使您可以访问所有变量和函数.随意查看/编辑/删除它们!

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()
Run Code Online (Sandbox Code Playgroud)


yoj*_*o87 11

Node.js中有内置的命令行调试器客户端.Cloud 9 IDE也有非常好的(可视)调试器.


Sur*_*uru 11

Visual Studio Code将在调试时适用于我们.


Jos*_*das 10

我为使用node-inspector的人编写了一个简短的Node.js调试入门,以帮助那些不知道从哪里开始的人.


One*_*ion 8

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


Rah*_*mar 8

使用--inspect标志启动节点进程.

node --inspect index.js

然后chrome://inspect在chrome中打开.单击"打开专用的DevTools for Node"链接或安装 chrome扩展以轻松打开chrome DevTools.

有关更多信息,请参阅链接


Bar*_*Lee 7

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

它输出带有时间戳,文件名,方法名,行号,路径或调用堆栈,支持颜色控制台以及支持数据库,文件,流传输的日志消息.我是作者.


Sha*_*ssy 7

假设您的计算机上安装了node-inspector(如果没有,只需键入'npm install -g node-inspector'),您只需运行:

node-inspector & node --debug-brk scriptFileName.js
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*est 5

There is the new open-source Nodeclipse project (as a Eclipse plugin or Enide Studio):

Nodeclipse became #1 in Eclipse Top 10 NEW Plugins for 2013. It uses a modified V8 debugger (from Google Chrome Developer Tools for Java).

Nodeclipse is free open-source software released at the start of every month.


卢声远*_* Lu 5

IntelliJ对于Node.js的工作非常出色。

此外,IntelliJ还很好地支持“代码协助”。


cmd*_*cmd 5

有很多可能性...

调试支持通常使用v8调试协议或更新的Chrome调试协议来实现