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

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

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


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

评论

您可以使用轨迹进行命令行注入。

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

我发现本文非常有趣,并且对我也很有效:使用Chrome DevTools调试Node.js。希望对您有所帮助:)

“警报调试” :)

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

#1 楼

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

通过以下方式安装:

npm install -g node-inspector


然后运行:

node-debug app.js


评论


希望节点检查器处于活动状态。分析组件需要获得一些支持。

–乔纳森·杜马因(Jonathan Dumaine)
2011-12-5在0:32

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

–贾斯汀·沃肯汀(Justin Warkentin)
2012年10月20日,下午3:17

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

– PeterT
13年3月21日在18:13

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

– Balupton
13年7月25日在15:31

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

–́Clark
17年4月4日,0:31



#2 楼

调试


Joyent指南
调试器
Node Inspector
Visual Studio代码
Cloud9
括号

>配置文件


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

堆转储


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

火焰图


0x

jam3 / devtool然后是Chrome Developer Tools Flame Charts


Dtrace和StackVis —仅在SmartOS上受支持

clinicjs

跟踪


使用TraceGL进行交互式堆栈跟踪

日志记录

输出调试信息的库


Caterpillar
Tracer
涂鸦

增强堆栈跟踪的库信息


Longjohn

基准测试



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

wrk

其他


跟踪
Vantage
Bugger
Google跟踪框架
Paul Irish's Guide

旧版

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



https://github.com/bnoordhuis/node-profiler-被内置在调试中

https://github.com/c4milo/node-webkit-agent-替换为节点检查器

https://nodetime.com/-defunct


评论


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

–reallynice
13-10-25在12:28



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

– shacharz
2014年7月20日12:09



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

– Stepan Yakovenko
2014年9月8日,12:45

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

– Stepan Yakovenko
2014年9月8日在12:47



唯一对我有用的探查器是节点--prof的nprof + v8.log。

–丹·阿布拉莫夫(Dan Abramov)
2015年1月9日在1:07

#3 楼

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

评论


我很感兴趣,在Paul爱尔兰人和Pavel在Google IO上所做的演讲之后,现在是否可以直接在Chrome开发者工具中调试node.js而不需要日食?

– Balupton
2011年5月19日在20:35

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

–业余咖啡师
2012年1月6日在16:40



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

– Paul Verest
2013年6月16日15:53

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

–洛基
15年5月18日在22:04



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

– zeronone
16年7月5日在2:25

#4 楼

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



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

node --inspect server.js


也可以通过传递--inspect-brk来中断第一行。

评论


我不希望打折上面的步骤,而只是分享一下...我试图创建一个稍微更健壮且更易于安装的包装器。参见:github.com/jaridmargolin/inspect-process

–贾里德·马戈林(Jarid R. Margolin)
16-11-17在22:30



@ JaridR.Margolin尼斯。我更新了答案,改为使用该答案。容易安装且效果更好:)

– Gregers
16 Dec 13'在10:31

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

– LOAS
17年1月2日在10:44

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

– RoccoB
17年3月23日在18:15

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

–Pieter Meiresone
17年9月10日在6:30

#5 楼

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

node debug script.js

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

评论


您是否有使用说明文档的链接?

–法比安·雅各布斯(Fabian Jakobs)
2011年1月16日,12:17

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

– JulianW
2011年1月20日23:59



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

– Marc
2011年9月6日下午12:13

您可能必须更改--debug才能调试而不使用破折号。这就是我最终使它起作用的方式。 --debug和debug做两件事是令人困惑的。

– Benekastah
2011年10月7日,下午5:55

您如何使程序真正运行? “ r->应用程序已在运行中...”,当我尝试继续运行并且遇到试图获取输入的语句时,它使我回到调试提示符,而不是让我输入所需的输入。

–迈克尔
16年7月11日在23:22

#6 楼

Visual Studio Code将是我进行调试的选择。无需安装任何工具或npm install的东西。
只需在package.json中设置应用程序的起点,VSCode就会在解决方案中自动创建配置文件。它建立在Electron之上,并在上面建立了Atom之类的编辑器。


VS Code提供了与您在
VS,Eclipse等其他IDE中可能具有的类似调试体验。





评论


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

–calbertts
17年5月24日在21:48

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

–赛义德·法赞
17-10-27在10:35

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

–elboletaire
18 Mar 19 '18 at 13:22

总是问我一个配置文件夹,它开箱即用

– carkod
18年6月18日在14:55

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

– Vipul Dessai
19/12/25在11:16

#7 楼

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

它可以在多个OS上运行,并且内置了Node.js调试功能(如以及大量其他内容](http://www.jetbrains.com/webstorm/features/index.html)。

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



在Mac上似乎比Windows占用更多的资源在版本6中似乎不再是问题。

如果有代码段,那就太好了支持(例如Sublime Text 2的支持-即键入'fun'并点击'tab'以添加功能。请参见下面的@WickyNilliams评论-使用实时模板,您还具有摘录支持。


评论


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

– WickyNilliams
2012年9月26日15:12

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

–乔希·利普津(Josh Liptzin)
2014年6月11日19:45

#8 楼

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

调试日志

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

交互式调试

就控制台日志记录而言,它很方便,要进行专业调试,您需要袖手旁观并陷入困境。设置断点,逐步执行代码,检查范围和变量,以了解导致这种奇怪行为的原因。正如其他人提到的那样,节点检查器实际上就是蜜蜂的膝盖。它可以使用内置调试器完成所有操作,但是可以使用熟悉的Chrome DevTools界面。
如果像我一样使用Webstorm,那么这里是从那里进行调试的便捷指南。
<堆栈跟踪

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

内存泄漏

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


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



RisingStack-调试节点。 js应用程序
NearForm的David Mark Clements的精彩文章

如果您想观看视频,那么


Netflix JS对话-调试生产中的Node.js

来自跟踪工作组的有关跟踪和调试node.js的有趣视频
有关Node-inspector的15分钟真正有用的视频

选择的路径,只要确保您了解调试的方法




这是一件痛苦的事。知道
属于您自己,没有其他人做到了

Sophocles,Ajax


#9 楼

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



评论


这很酷,仍然不知道您的Backtrace是什么

– misaxi
14年2月18日在23:33

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

– Eugene
15年7月15日在1:21

#10 楼

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

#11 楼

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

您甚至可以在需要...的情况下调试grunt和gulp任务。

评论


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

–bgse
2015年10月20日,下午2:35

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

–破折号
16年2月7日在13:33

#12 楼

我编写了另一种方法来调试Node.js代码,该方法稳定且极其简单。可在https://github.com/sa/iron-node上获得。



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

安装:

npm install iron-node -g;

调试:

iron-node yourscript.js;

#13 楼

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

#14 楼

使用Chrome版本67.0.3396.62(+)


运行节点应用程序


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



以chrome浏览您的应用程序,例如“ localhost:port”
打开DevTools。
单击响应设备图标旁边的节点图标。



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



#15 楼

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


#16 楼

Node.js中有内置的命令行调试器客户端。 Cloud 9 IDE也具有相当不错的(可视)调试器。

评论


Cloud 9是我的理想之选,尤其是在不携带笔记本电脑的情况下,可以在任何地方自由选择代码。

–风土人情
16年1月8日在15:40

#17 楼

Visual Studio Code将在调试中为我们工作。

#18 楼

我为那些不确定从哪里开始的人整理了一个简短的Node.js调试入门,以使用node-inspector。

#19 楼

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

#20 楼

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

node --inspect index.js

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

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

#21 楼

如果您需要强大的Node.js日志记录库,最好使用Tracer https://github.com/baryon/tracer。

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

#22 楼

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

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


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

评论


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

– Dan Dascalescu
2014年2月12日,下午1:46

#23 楼

出于完整性考虑:

PyCharm 3.0 + Node.js插件提供了很棒的开发+运行+调试体验。

#24 楼

IntelliJ对于Node.js表现出色。

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

#25 楼

有很多可能性...



节点包括调试实用程序

node-inspector
代码编辑器/ IDE(请参见调试)以下内容之一的说明)



Atom,
Webstorm
以及更多



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

#26 楼

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



Nodeclipse在2013年Eclipse十大新插件中排名第一。它使用经过修改的V8调试器(来自Google Chrome开发者工具Java版)。

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

#27 楼

自8.1版以来,NetBeans IDE一直支持Node.js:


<...>

新功能亮点

Node .js应用程序开发


新的Node.js项目向导
新的Node.js Express向导
增强的JavaScript编辑器
对运行Node.js的新支持应用程序
对调试Node.js应用程序的新支持。

<...>


其他参考:



NetBeans Wiki / NewAndNoteworthyNB81。

NetBeans IDE中的Node.js Express应用程序,Geertjan-Oracle。


#28 楼

使用此命令

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


#29 楼

ndb是由Chrome DevTools支持的改进的Node.js调试体验

https://github.com/GoogleChromeLabs/ndb

#30 楼

使用您喜欢的浏览器调试器调试小型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键和中提琴:在浏览器中调试。