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


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

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

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

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


1396
2017-12-15 22:50


起源


您可以使用 轨迹 用于命令行注入。 - Ali Davut
如果要使用传统的IDE appoach进行调试,请使用vscode use vscode youtube.com/watch?v=egBJ0cd0GLM - jw56578
我发现这篇文章非常有趣,它对我很有用: 使用Chrome DevTools调试Node.js.。希望能帮助到你 :) - Timbergus
“警报调试”:) - The Red Pea


答案:


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

安装它:

npm install -g node-inspector

然后运行:

node-debug app.js

1193
2017-10-15 17:17



希望节点检查员处于活动状态。分析组件需要得到一些爱。 - Jonathan Dumaine
对我来说不幸的是,node-inspector无法使用最新版本的Node.js,并且自v0.1起它不支持登录到浏览器控制台。 node-codein只是马车。因此,我编写了自己的模块来帮助调试,允许您将对象转储到Web浏览器控制台。我认为它可能对其他人有用: 节点猴。此外,它适用于Firefox和Chrome。 - Justin Warkentin
由于这是一个非常令人惊讶和流行的工具,原作者已经承认他们不再拥有维护它的资源这一事实并不是一个问题,因为开源社区可以把它拿起来? - PeterT
现在,检查员现在由StrongLoop积极维护,并再次使用最新版本(0.3)!公告在这里: blog.strongloop.com/... - balupton
“从版本6.3开始,Node.js提供了一个基于DevTools的buit-in调试器,它主要弃用Node Inspector,参见例如 这篇博文 开始。内置调试器由V8 / Chromium团队直接开发,并提供某些高级功能(例如长/异步堆栈跟踪),这些功能在Node Inspector中难以实现。  - 说节点检查员回购 - ThisClark


调试

剖析

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

Heapdumps

Flamegraphs

追踪

记录

输出调试信息的库

增强堆栈跟踪信息的库

标杆

其他

遗产

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


672
2018-05-12 21:37



关于Nodetime:对于那些不想将数据发送到nodetime服务器的人来说,有一个本地“替代”(它仍然基于nodetime), look 模块,正如指出的那样 stackoverflow.com/questions/12864221/nodejs-memory-profiling - reallynice
falme图已经在chrome开发人员工具中。 - Farid Nouri Neshat
我没有发现nodetime的cpu报告非常有用:1。我只得到一个方法树,没有“自我”时间。似乎在一定数量的百分比下修剪树枝。那些2使得很难找到cpu花费大部分时间的地方。 - shacharz
npm install -g profiler抱怨Windows 7上缺少python。我试图设置python = C:\ Python34 \,但这会导致崩溃。 - Stepan Yakovenko
开箱即用的唯一分析器是nodetime。但它的cpu profiling stacktrace是无法使用的(它没有提供足够的细节)。 Nodejs工具4 msvc 2012也有分析器,但它也报告了关键的未修复bug ... - Stepan Yakovenko


V8 调试器作为Google的一部分发布 Chrome开发者工具 可用于调试Node.js脚本。有关其工作原理的详细说明,请参阅 Node.js GitHub wiki

还有 导航台,一个用Node.js本身编写的命令行调试器。


208
2018-03-29 08:57



我很感兴趣,在Google IO的演示之后,Paul Irish和Pavel做了,现在可以直接调试node.js而不需要eclipse吗? - balupton
+1为我工作得非常好。在Mac OS X上使用全新的Eclipse 3.x,x64版本。安装说明也很好。谢谢。 - amateur barista
也在Nodeclipse中 nodeclipse.org (修复了一些与Node.js相关的错误) - Paul Verest
我进入这个舞台是trepanjs(npmjs.com/package/trepanjs)。它具有节点调试器的所有优点,但更好地符合gdb。它还具有更多功能和命令,如语法突出显示,更广泛的在线帮助和更智能的评估。看到 github.com/rocky/trepanjs/wiki/Cool-things 一些很酷的功能。 - rocky
该功能目前在夜间版本中提供。点击这里查看说明: https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt - zeronone


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

Nodes builtin GUI debugger

只需传递检查员标志,您将获得检查员的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

151
2017-09-14 14:51



不要忽视上面的步骤,只是为了分享...我试图创建一个更强大,更容易安装的包装器。看到: github.com/jaridmargolin/inspect-process - Jarid R. Margolin
@ JaridR.Margolin很好。我更新了使用它的答案。设置更容易,效果更好:) - gregers
这个答案目前处于最底层,它是唯一一个真正为我工作的答案。这真是太棒了! - LOAS
如果它对任何人都有帮助,我会发布一个视频来解释这个过程 youtu.be/rtZKUnks6jI。 - RoccoB
你在哪里获得了Chrome开发者工具的黑暗主题? - Pieter Meiresone


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

node debug script.js

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


83
2018-01-16 01:20



您是否有任何关于如何使用它的文档的链接? - Fabian Jakobs
我没有任何文档。刚更新到v0.3.5。放一行“调试器”;在你的代码中,它将作为断点。它的工作方式类似于ndb / gdb。在你做“node debug script.js”后输入help。你会看到它支持的命令。 p = print,l = list ...所以你不需要输入完整的世界 - JulianW
见截屏视频 vimeo.com/19465332 - mjhm
请注意,在Windows下它是“node.exe --debug myscript.js”但它仍然无法正常工作。 - Marc
你可能需要改变 --debug 至 debug 没有破折号。这就是我最终让它发挥作用的方式。令人困惑的是 --debug 和 debug 做两件事。 - benekastah


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

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

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

  1. 它似乎在Mac上比Windows更耗资源 它在版本6中似乎不再是问题。
  2. 如果它有Snippet支持(就像那些那样)会很好 崇高文本2  - 即输入'fun'并点击'tab'以输入功能。 请参阅下面的@WickyNilliams评论 - 使用实时模板,您还可以获得代码段支持。

52
2018-05-03 14:42



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


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

VS Code提供了与您相似的调试体验   有其他IDE,如VS,Eclipse等。

enter image description here enter image description here


52
2018-02-19 10:21



它很酷,但它有滞后。这就是我喜欢Sublime的原因。 - calbertts
但是sublime没有调试器,我认为VS代码也很快 - Syed Faizan
我从5年前就获得了一份崇高的执照。几个月以前我甚至没有安装Sublime Text,只是vscode。开箱即用有很多我在Sublime中想念的工具(比如集成终端......)。 - elboletaire
总是问我一个配置文件夹,它开箱即用 - carkod


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

screenshot


36
2018-05-14 22:21



这很酷,但仍然不知道什么是Backtrace - misaxi
我现在很喜欢忒修斯,但我仍然有一些问题,我需要设置一个断点并追踪。我目前不得不杀死我的应用程序,使用--debug启动节点,跟踪trhough,然后使用node-theseus启动应用程序。是否可以使用具有断点的Theseus?我试过在GitHub页面,StackOverflow和论坛上搜索,但到目前为止没有运气。我错过了什么吗? - Eugene


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

调试日志

让我们面对现实,我们都爱一个好人 console.log('Uh oh, if you reached here, you better run.') 有时这很有效,所以如果你不愿意离它太远,至少要在你的日志上添加一些金光闪闪的东西 Visionmedia的调试

交互式调试

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

堆栈痕迹

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

内存泄漏

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


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

如果你想观看视频那么

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

enter image description here

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

索福克勒斯,阿贾克斯


31
2017-09-15 15:33





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


21
2018-05-02 12:30