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


1577

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

现在,我主要使用带有以下打印语句的警报调试

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

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


3
您可以使用轨迹进行命令行注入。
Ali Davut 2013年

5
如果您想使用传统的IDE方法进行调试,请使用vscode使用vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578

4
我发现这篇文章很有意思,它为我工作得很好:调试Node.js的使用Chrome DevTools。希望对您
有所

2
“警报调试” :)
红豌豆

请记住--inspect-brk--inspect如果要在加载时调试实际的服务器代码,则需要使用INSTEAD OF 运行nod 。参见stackoverflow.com/questions/59596138
Jorge Orpinel

Answers:


1261

节点检查器可以节省一天!从支持WebSocket的任何浏览器中使用它。断点,事件探查器,实时编码等,这真的很棒。

通过以下方式安装:

npm install -g node-inspector

然后运行:

node-debug app.js

14
希望节点检查器处于活动状态。分析组件需要获得一些支持。
乔纳森·杜马因

13
对于我来说不幸的是,node-inspector不适用于最新版本的Node.js,并且自v0.1起不支持登录到浏览器控制台。节点编码只是越野车。因此,我编写了自己的模块,通过允许您将对象等转储到Web浏览器控制台来帮助调试。我认为这可能对其他人有用:node-monkey。另外,它在Firefox和Chrome中均可使用。
贾斯汀·沃肯汀

7
既然这是一个如此令人赞叹和流行的工具,那么肯定的是,原始作者承认他们不再拥有维护它的资源这一事实将不是一个问题,因为开源社区可以选择它吗?
PeterT

34
现在,检查器现在由StrongLoop积极维护,并且正在使用最新版本(0.3)再次使用!此处的公告:blog.strongloop.com/…–
balupton

21
“从6.3版开始,Node.js提供了一个基于DevTools的内置调试器,该调试器主要不赞成Node Inspector,请参见此博客文章开始。内置调试器由V8 / Chromium团队直接开发,并提供了某些高级功能。难以在Node Inspector中实现的功能(例如长/异步堆栈跟踪)。” -表示节点检查器回购
ThisClark

749

调试

剖析

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

堆转储

火焰图

追踪

记录中

输出调试信息的库

增强堆栈跟踪信息的库

标杆管理

其他

遗产

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


8
关于Nodetime:对于那些不想将数据发送到Nodetime服务器的用户,存在一个本地“替代”(它仍然基于nodetime)look,如stackoverflow.com/questions/12864221/nodejs-memory-剖析
truenice

我发现nodetime的cpu报告不是非常有用:1.我只是得到了方法树,没有“自我”时间。2.似乎树枝被修剪到一定百分比以下。那些2使得很难理解CPU大部分时间都花在哪里。
shacharz 2014年

npm install -g profiler抱怨Windows 7上缺少python。我试图设置python = C:\ Python34 \,但这会导致崩溃。
Stepan Yakovenko

开箱即用的唯一探查器是nodetime。但是它的cpu分析stacktrace无法使用(它没有提供足够的细节)。Nodejs工具4 msvc 2012也有分析器,但它也报告了严重的未修复错误……
Stepan

对我有用的唯一探查器是nprof+ v8.log来自node --prof
Dan Abramov 2015年

253

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


12
我感兴趣的是,在Paul Paul Irish和Pavel在Google IO上的演讲之后,现在是否可以直接在Chrome开发者工具中调试node.js而不需要Eclipse?
2011年

+1对我来说很好。在Mac OS X上使用全新的Eclipse 3.x,x64版本。安装说明也写得很好。谢谢。
业余咖啡师,2012年

还包含在Nodeclipse nodeclipse.org中(已修复了一些与Node.js相关的错误)
Paul Verest 2013年

我进入这个领域的是trepanjs(npmjs.com/package/trepanjs)。它具有节点调试器的所有优点,但更符合gdb。它还具有更多功能和命令,例如语法突出显示,更广泛的在线帮助和更智能的评估。有关其一些很酷的功能,请参见github.com/rocky/trepanjs/wiki/Cool-things
2015年

1
该功能当前在每晚版本中可用。在此处查看说明:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone

191

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

节点内置GUI调试器

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

node --inspect server.js

您也可以通过传递--inspect-brk而在第一行上中断。


2
不是为了简化上述步骤,而是为了分享……我试图创建一个稍微更健壮且更易于安装的包装器。参见:github.com/jaridmargolin/inspect-process
Jarid R. Margolin

1
@ JaridR.Margolin尼斯。我更新了答案,改为使用该答案。设置起来容易很多,而且效果更好:)
gregers

2
这个答案目前在底部,这是唯一对我有用的答案。这真棒!
LOAS

3
万一它对任何人都有帮助,我在youtu.be/rtZKUnks6jI上发布了一个解释此过程的视频。
RoccoB

2
您从哪里获得了chrome开发人员工具的深色主题?
Pieter Meiresone

93

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

node debug script.js

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


1
您是否有使用说明文档的链接?
Fabian Jakobs,

2
我没有任何文件。刚刚更新至v0.3.5。放一行“调试器”;在您的代码中将作为断点。它的工作方式类似于ndb / gdb。完成“节点调试script.js”后,输入帮助。您将看到它支持的命令。p =打印,l =列表...因此您无需输入整个世界
JulianW 2011年

2
请注意,在Windows下它是“ node.exe --debug myscript.js”,但它仍然无法正常工作。
马克

6
您可能必须更改--debugdebug没有破折号。这就是我最终使它起作用的方式。这样做--debug并混淆了debug两个不同的事情。
benekastah 2011年

您如何使程序实际运行?“ r-> app is already running...”,当我尝试继续并且遇到试图获取输入的语句时,它使我回到调试提示符,而不是让我输入所需的输入。
迈克尔

70

我会选择 Visual Studio Code进行调试。没有安装任何工具或npm install东西的开销。只需在package.json中设置应用程序的起点,VSCode就会在您的解决方案内部自动创建一个配置文件。它建立在Electron之上,像Atom这样的编辑器也建立在Electron上。

VS Code提供了与其他IDE(例如VS,Eclipse等)类似的调试体验。

在此处输入图片说明 在此处输入图片说明


很酷,但是有点滞后。这就是为什么我更喜欢Sublime。
卡尔伯茨

3
但是sublime没有调试器,我认为VS代码也非常快
Syed Faizan

1
我从5年前就获得了崇高的执照。从几个月前开始,我什至没有安装Sublime Text,仅安装了vscode。开箱即用的工具有很多我在Sublime中缺少的工具(例如集成终端。)。
elboletaire '18

总是问我config文件夹,它不箱子的工作了
carkod

@carkod enable vs代码自动附加首选项,并使用vs代码终端启动脚本,例如节点--inspect file-name.js
Vipul Dessai

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评论-使用实时模板,您还将获得摘要支持。

10
webstorm确实具有摘要支持BTW ;-),尽管它们被称为“实时模板”而不是摘要。
WickyNilliams 2012年

3
如果您只想调试node.js应用程序并且已经拥有Intellij IDEA许可证,则只需安装node.js插件即可,而无需购买WebStorm许可证。插件安装完成后,设置运行/调试配置非常容易。
2014年

42

这里有很多不错的答案,但是我想补充一下我的观点(基于我的方法如何发展)

调试日志

面对console.log('Uh oh, if you reached here, you better run.')现实吧,我们所有人都喜欢一个好的东西,有时效果很好,因此,如果您不愿远离它,至少可以使用Visionmedia的debug在日志中添加一些亮点

交互式调试

与控制台日志记录一样方便,要进行专业的调试,您需要袖手旁观并陷入困境。设置断点,单步执行代码,检查范围和变量,以查看导致异常行为的原因。正如其他人提到的那样,节点检查器实际上就是蜜蜂的膝盖。它使用内置的调试器可以完成您可以做的所有事情,但是使用熟悉的Chrome DevTools界面。如果像我一样使用Webstorm,那么这里是从此处进行调试的便捷指南。

堆栈痕迹

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

内存泄漏

使用Node.js,我们可以使服务器进程保持相当长的时间。如果您认为它冒出了一些令人讨厌的漏洞,该怎么办?使用heapdump和Chrome DevTools比较一些快照,看看有什么变化。


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

如果您想观看视频,则

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

在此处输入图片说明


看着自己的麻烦,知道
自己就是别人, 这是一件痛苦的事

Sophocles,阿贾克斯


41

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

屏幕截图


这很酷,仍然不知道tho的回溯是什么
misaxi 2014年

我目前正在爱These修斯,但是我仍然需要设置断点并进行追溯的一些问题。我目前必须终止我的应用程序,使用--debug启动节点,跟踪通过,然后使用node-theseus启动应用程序。可以在断点上使用These修斯吗?我尝试在GitHub页面,StackOverflow和论坛附近进行搜索,但到目前为止还没有运气。我想念什么吗?
尤金(Eugene)2015年

25

适用于Visual Studio 2012或2013的Node.js工具包含调试器。这里的概述指出“用于Visual Studio的Node.js工具包括对调试节点应用程序的完整支持。”。作为Node.js的新手,但拥有.NET背景,我发现此插件是调试Node.js应用程序的好方法。


23

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

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


1
从Visual Studio Code 8.0开始,对OSX和Linux的调试支持非常好。
bgse 2015年

花费了一整晚的时间使节点检查器和Strongloop在Windows下运行(Visual Studio社区,降级为npm 2,安装python,env变量,使用cmd而不是babun / cygwin等),然后玩了一个小时,我必须说,这至少在Windows中,也许在一般情况下(如果您没有webstorn)是最好的选择
短评



15

使用Chrome版本67.0.3396.62(+)

  1. 运行节点应用

节点--inspect-brk = 0.0.0.0:9229 server.js(服务器js文件名)

  1. 在chrome中浏览您的应用,例如“ localhost:port”
  2. 打开DevTools。
  3. 单击响应设备图标旁边的节点图标。

在此处输入图片说明

将会弹出另一个DevTools窗口,专门用于调试节点应用程序。

在此处输入图片说明


13

我创建了一个名为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()





8

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

node --inspect index.js

然后chrome://inspect在Chrome中打开。点击“打开用于节点的专用DevTools”链接或安装 chrome扩展程序,以轻松打开chrome DevTools。

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


7

如果您需要功能强大的Node.js日志记录库,那么Tracer https://github.com/baryon/tracer是一个更好的选择。

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


7

假设您已经在计算机上安装了节点检查器(如果没有,只需键入“ npm install -g节点检查器”),则只需运行:

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

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


1
已经提到了节点检查器;也许删除这个答案?
Dan Dascalescu 2014年






4

使用此命令

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect


3

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

$ npm install -g browserify

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

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

(这里的缺点是您必须移动或评论 requires所有文件中的。)

包括bundle.js在HTML文件中像这样:

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

现在,将文件加载到浏览器中,然后按F12和viola:在浏览器中调试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.