ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

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

您可以使用 Locus 进行命令行注入。
如果您想使用传统的 IDE 方法进行调试,请使用 vscode 使用 vscode youtube.com/watch?v=egBJ0cd0GLM
我发现这篇文章非常有趣,而且它对我很有效:Debugging Node.js with Chrome DevTools。希望能帮助到你 :)
“警报调试” :)
请记住,如果您想在加载时调试实际的服务器代码,则需要使用 --inspect-brk INSTEAD OF --inspect 运行 nod。请参阅stackoverflow.com/questions/59596138

d
daralthus

node-inspector 可以挽救这一天!在任何支持 WebSocket 的浏览器中使用它。断点、分析器、实时编码等……真是太棒了。

安装它:

npm install -g node-inspector

然后运行:

node-debug app.js

希望节点检查器处于活动状态。分析组件需要得到一些爱。
对我来说不幸的是,node-inspector 不适用于最新版本的 Node.js,并且自 v0.1 以来它不支持登录到浏览器控制台。节点代码只是错误的。因此,我编写了自己的模块来帮助调试,允许您将对象等转储到 Web 浏览器控制台。我认为它可能对其他人有用:node-monkey。此外,它适用于 Firefox 和 Chrome。
既然这显然是一个令人惊叹和流行的工具,那么原作者承认他们不再有资源来维护它的事实肯定不会成为开源社区可以接受的问题吗?
现在检查器现在由 StrongLoop 积极维护,并再次使用最新版本 (0.3) 耶!此处公告:blog.strongloop.com/…
“从 6.3 版开始,Node.js 提供了一个基于 DevTools 的内置调试器,该调试器主要弃用了 Node Inspector,请参阅例如 this blog post 开始。内置调试器由 V8/Chromium 团队直接开发,并且提供某些在 Node Inspector 中难以实现的高级功能(例如长/异步堆栈跟踪)。” - 节点检查器 repo 说
c
codemeasandwich

调试

Joyent 指南

调试器

节点检查器

视觉工作室代码

云9

括号

剖析

节点 --prof ./app.js 节点 --prof-process ./the-generated-log-file

堆转储

使用 Chrome 开发者工具的 node-heapdump

火焰图

0x

jam3/devtool 然后是 Chrome 开发者工具火焰图

Dtrace 和 StackVis — 仅支持 SmartOS

诊所

追踪

使用 TraceGL 的交互式堆栈跟踪

日志记录

输出调试信息的库

毛虫

示踪剂

涂鸦

增强堆栈跟踪信息的库

龙约翰

基准测试

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

工作

其他

痕迹

华帝

臭虫

谷歌追踪框架

保罗爱尔兰指南

遗产

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

https://github.com/bnoordhuis/node-profiler - 替换为内置调试

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

https://nodetime.com/ - 已失效


关于 Nodetime:对于那些不想将数据发送到 nodetime 服务器的人来说,有一个本地“替代方案”(它仍然基于 nodetime),即 look 模块,如 stackoverflow.com/questions/12864221/nodejs-memory-profiling 中所指出的
我没有发现来自 nodetime 的 cpu 报告很有帮助: 1. 我只是得到一个方法树,没有“自我”时间。 2. 好像树枝被修剪到一定比例以下。那些 2 使得很难理解 cpu 大部分时间花在哪里。
npm install -g profiler 抱怨 windows 7 上缺少 python。我尝试设置 python=C:\Python34\,但这会导致崩溃。
唯一开箱即用的分析器是 nodetime。但是它的 cpu 分析堆栈跟踪是不可用的(它没有提供足够的细节)。 Nodejs tools 4 msvc 2012 也有分析器,但它也报告了严重的未修复错误...
唯一对我有用的分析器是来自 node --profnprof + v8.log
d
d4nyll

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


我很感兴趣,在 Paul Irish 和 Pavel 所做的 Google IO 演示之后,现在是否可以直接将 node.js 调试到 Chrome 开发人员工具而不需要 eclipse?
+1 对我来说效果很好。在 Mac OS X 上使用新的 Eclipse 3.x、x64 版本。安装说明也写得很好。谢谢你。
也包含在 Nodeclipse nodeclipse.org 中(修复了一些与 Node.js 相关的错误)
我进入这个领域的是 trepanjs (npmjs.com/package/trepanjs)。它具有节点调试器的所有优点,但更符合 gdb。它还具有更多功能和命令,例如语法突出显示、更广泛的在线帮助和更智能的评估。请参阅 github.com/rocky/trepanjs/wiki/Cool-things 了解它的一些很酷的功能。
该功能目前在夜间版本中可用。在此处查看说明:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
A
Alister

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

https://i.stack.imgur.com/eZAzW.png

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

node --inspect server.js

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


不打折上面的步骤,只是为了分享......我试图创建一个更健壮且更易于安装的包装器。请参阅:github.com/jaridmargolin/inspect-process
@JaridR.Margolin 不错。我更新了答案以使用它。更容易设置和更好地工作:)
这个答案目前位于底部,它是唯一对我有用的答案。这翻转真棒!
如果它对任何人有帮助,我在 youtu.be/rtZKUnks6jI 上放了一段视频来解释这个过程。
您从哪里获得 chrome 开发人员工具的深色主题?
S
Salman von Abbas

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

node debug script.js

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


您是否有任何有关如何使用它的文档的链接?
我没有任何文档。刚刚更新到 v0.3.5。放一行“调试器;”在您的代码中将充当断点。它的工作方式类似于 ndb / gdb。在你做“节点调试 script.js”之后输入帮助。你会看到它支持的命令。 p = print, l = list... 所以你不需要输入完整的世界
请注意,在 Windows 下它是“node.exe --debug myscript.js”,但它仍然不起作用。
您可能必须将 --debug 更改为 debug 而不使用破折号。这就是我最终让它工作的方式。令人困惑的是,--debugdebug 做了两件不同的事情。
你如何让程序真正运行? “r -> app is already running...”,当我尝试继续并遇到一个试图获取输入的语句时,它会将我退回到调试提示符,而不是让我输入所需的输入。
S
Shreyas

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

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

https://i.stack.imgur.com/gxSUW.png


这很酷,但它有滞后。这就是为什么我更喜欢 Sublime。
但是 sublime 没有调试器,我认为 VS 代码也很快
我从 5 年前就拥有了一个崇高的许可证。从几个月前开始,我什至不安装 Sublime Text,只安装 vscode。开箱即用有很多我在 Sublime 中错过的工具(比如集成终端..)。
总是问我一个配置文件夹,它不能开箱即用
@carkod 启用 vs code 自动附加首选项并使用 vs code 终端启动您的脚本,例如 node --inspect file-name.js
P
Peter Mortensen

我个人使用 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 评论 - 使用实时模板,您还可以获得片段支持。


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

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

调试日志

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

交互式调试

尽管控制台日志记录很方便,但要进行专业调试,您需要卷起袖子并陷入困境。设置断点,单步执行代码,检查范围和变量以查看导致这种奇怪行为的原因。正如其他人所提到的,node-inspector 确实是蜜蜂的膝盖。它可以完成您使用内置调试器所做的一切,但使用熟悉的 Chrome DevTools 界面。如果像我一样使用 Webstorm,那么 here 是一个方便的调试指南。

堆栈跟踪

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

内存泄漏

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

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

RisingStack - 调试 Node.js 应用程序

NearForm 的 David Mark Clements 的优秀文章

如果您想观看视频,那么

Netflix JS Talks - 在生产环境中调试 Node.js

跟踪工作组关于跟踪和调试 node.js 的有趣视频

关于节点检查器的真正内容丰富的 15 分钟视频

无论您选择什么路径,只要确保您了解您的调试方式

https://i.stack.imgur.com/hBTOr.png

看到自己的麻烦并知道自己和其他人都没有做到这一点是一件痛苦的事情索福克勒斯,阿贾克斯


S
Sindre Sorhus

Theseus 是 Adobe Research 的一个项目,可让您在其开源编辑器 Brackets 中调试您的 Node.js 代码。它有一些有趣的特性,比如实时代码覆盖、追溯检查、异步调用树。

https://i.stack.imgur.com/ZXwGD.png


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

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


P
Peter Mortensen

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

您甚至可以调试 grunt and gulp tasks,如果您需要...


从 Visual Studio Code 8.0 开始,对 OSX 和 Linux 的调试支持变得非常好。
花了整整一个晚上让 node-inspector 和 strongloop 在 windows 下运行(Visual Studio 社区,降级到 npm 2,安装 python,env 变量,使用 cmd 而不是 babun / cygwin 等),然后玩了一个小时,我不得不说这是最好的选择,至少在 Windows 和一般情况下(如果你没有 webstor)
C
Community

我编写了一种不同的方法来调试 Node.js 代码,它稳定且非常简单。可在 https://github.com/s-a/iron-node 获得。

https://sa.github.io/iron-node/iron-node-demo.gif

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

安装:

npm install iron-node -g;

调试:

iron-node yourscript.js;


P
Peter Mortensen

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


b
babidi

使用 Chrome 版本 67.0.3396.62(+)

运行节点应用

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

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

https://i.stack.imgur.com/fLUkP.png

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

https://i.stack.imgur.com/pttJX.png


k
keen

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

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

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

k
keen

Node.js 中有内置的命令行 debugger client。 Cloud 9 IDE 也有很好的(视觉)debugger


Cloud 9 适合我,尤其是无需携带笔记本电脑即可在任何地方自由选择代码。
v
vhs

我整理了一个简短的 Node.js debugging primer,介绍如何使用 node-inspector,供那些不确定从哪里开始的人使用。


S
Surendra Parchuru

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


O
OneMoreQuestion

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


P
Peter Mortensen

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

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


P
Peter Mortensen

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

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

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


提到了节点检查器 already;也许删除这个答案?
R
Rahul Kumar

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

node --inspect index.js

然后在 chrome 中打开 chrome://inspect。单击“Open dedicated DevTools for Node”链接或安装 this chrome 扩展以轻松打开 chrome DevTools。

有关详细信息,请参阅 this 链接


c
cmd

有很多可能性...

节点包括一个调试实用程序

节点检查器

代码编辑器/IDE(请参阅以下其中一项的调试说明)Atom、VSCode Webstorm 等

原子,

VSCode

网络风暴

和更多

调试支持通常使用 v8 Debugging Protocol 或更新的 Chrome Debugging Protocol 实现。


G
Glorfindel

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

https://i.stack.imgur.com/TD1qB.png

Nodeclipse 在 Eclipse Top 10 NEW Plugins for 2013 中成为 #1。它使用经过修改的 V8 调试器(来自 Google Chrome Developer Tools for Java)。

Nodeclipse 是免费的开源软件released at the start of every month


卢声远 Shengyuan Lu

IntelliJ 非常适合 Node.js。

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


P
Peter Mortensen

NetBeans IDE 自 version 8.1 起支持 Node.js:

<...> 新功能亮点 Node.js 应用程序开发 新 Node.js 项目向导 新 Node.js Express 向导 增强的 JavaScript 编辑器 对运行 Node.js 应用程序的新支持 对调试 Node.js 应用程序的新支持。 <...>

附加参考:

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


Z
Zahirul Haque

使用此命令

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

M
Mukesh

ndb 是一种改进的 Node.js 调试体验,由 Chrome DevTools 启用

https://github.com/GoogleChromeLabs/ndb


m
matt burns
node-debug -p 8888 scriptFileName.js