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

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

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

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

一定有更好的调试方法。我知道GoogleChrome有一个命令行调试器。这个调试器也适用于Node.js吗?

543473 次浏览

作为GoogleChrome开发工具的一部分发布的V8调试器可用于调试Node.js脚本。

节点检查器可以挽救这一天!从任何支持WebSocket的浏览器中使用它。断点、分析器、直播等……真的很棒。

安装它:

npm install -g node-inspector

然后运行:

node-debug app.js

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

node debug script.js

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

有内置的命令行调试器客户端在Node.js.云9 IDE也很不错(视觉)调试器

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

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

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

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

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

  1. 在Mac上似乎比Windows更需要资源在版本6中似乎不再是问题。
  2. 如果它有Snippet支持就好了(比如Sublime Text 2-即键入“乐趣”并点击“标签”以放入函数。请参阅下面的@WickyNilliams评论-使用实时模板,您还可以获得片段支持。

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

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

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

调试

剖析

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

堆转储

火焰照片

追查

日志

输出调试信息的库

增强堆栈跟踪信息的库

标杆管理

其他

遗产

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

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

截图

我整理了一个简短的Node.js调试底漆关于使用节点检查器对于那些不确定从哪里开始的人。

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

Nodeclipse成为2013年Eclipse十大新插件中的V8。它使用修改后的V8调试器(来自GoogleChromeDeveloper Tools forJava)。

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

我最初的回应是几年前的视觉工作室。

因此,通过hapi使用是一个很棒的日志记录包,但对于调试使用视觉工作室

原始回复(很久以前):我会使用沃尔玛实验室的。它会完成这项工作,而且非常灵活:

var hapi = require('hapi');var good = require('good');var server = hapi.createServer('localhost', 5000,{});server.route({SOME ROUTE HERE});server.start();
var options = {subscribers: {'console':               ['ops', 'request', 'log', 'error'],'http://localhost/logs': ['log']}};server.pack.require('good', options, function (err) {
if (!err) {console.log('Plugin loaded successfully');}});

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

node-debug -p 8888 scriptFileName.js

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

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

var pry = require('pryjs')
class FizzBuzz
run: ->for i in [1..100]output = ''eval(pry.it) // magicoutput += "Fizz" if i % 3 is 0output += "Buzz" if i % 5 is 0console.log output || i
bar: ->10
fizz = new FizzBuzz()fizz.run()

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

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

$ npm install -g browserify

现在将所有var x = requires('x')调用移动到requires.js文件中并运行:

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

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

bundle.js包含在超文本标记语言文件中,如下所示:

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

现在在浏览器中加载文件,然后按F12并在浏览器中按Viola: debug。

我编写了一种不同的方法来调试Node.js代码,它非常稳定且非常简单。

在此处输入图像描述

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

安装:

npm install iron-node -g;

调试:

iron-node yourscript.js;

IntelliJ非常适合Node.js.

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

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

您甚至可以调试咕噜和吞咽任务,如果您需要…

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

调试日志

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

交互式调试

虽然控制台日志记录很方便,但要进行专业调试,您需要卷起袖子并陷入其中。设置断点,单步执行您的代码,检查范围和变量以查看导致这种奇怪行为的原因。正如其他人所提到的,节点检查器真的是蜜蜂膝盖。它做了您可以使用内置调试器做的所有事情,但使用熟悉的ChromeDevTools界面。如果你像我一样使用网络风暴,那么这里是一个方便的调试指南。

堆栈跟踪

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

内存泄漏

有了Node.js,我们可以让服务器进程保持相当长的时间。如果您认为它已经引发了一些严重的泄漏,您该怎么办?使用堆转储和ChromeDevTools比较一些快照,看看有什么变化。


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

如果你想看一个视频(S)

无论您选择什么路径,请确保您了解如何调试

在此处输入图片描述

这是一件痛苦的事
看看自己的烦恼,知道
你自己和其他人都没有成功

索福克勒斯,阿贾克斯

NetBeans IDE自版本8.1以来Node.js支持:

<…>

新功能亮点

Node.js应用开发

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

<…>

其他参考资料:

  1. NetBeans Wiki/NewAndNote值得注意的NB81
  2. NetBeans IDE中的Node.jsExpress应用程序,Geertjan-Oracle

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

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

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

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

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

内置GUI调试器的节点

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

node --inspect server.js

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

有很多可能性……

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

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

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

node --inspect index.js

然后在chrome中打开chrome://inspect。单击“为Node打开专用DevTools”链接或安装这个 chrome扩展以轻松打开chrome DevTools。

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

使用此命令

DEBUG_LEVEL=all node file.jsDEBUG=* node file.jsnode file.js --inspect

调试应用程序Node.JS方法如下:

1)安装devool并使用它启动应用程序

npm install devtool -g --savedevtool server.js

这将在chrome开发者模式下打开,因此您可以放置调试器点并进行测试。

2)使用节点检查器调试

node-inspector

使用--debug进行调试

node --debug app.js

使用Chrome版本67.0.3396.62(+)

  1. 运行节点应用

0.0.0.0:9229server.js(server js filename)

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

在此处输入图片描述

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

在此处输入图片描述

如果愿意,您可以使用纯Node.js并在控制台中调试应用程序。

例如,让我们创建一个我们想要调试的虚拟debug.js文件并在其中放置断点(debugger语句):

let a = 5;debugger;
a *= 2;debugger;
let b = 10;debugger;
let c = a + b;debugger;
console.log(c);

然后您可以使用inspect命令运行此文件进行调试:

node inspect debug.js

这将在控制台中启动调试器,您将看到类似于以下内容的输出:

< Debugger listening on ws://127.0.0.1:9229/6da25f21-63a0-480d-b128-83a792b516fc< For help, see: https://nodejs.org/en/docs/inspector< Debugger attached.Break on start in debug.js:1> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;2 debugger;3

您可能会在这里注意到文件执行已在第一行停止。从这一刻起,您可以使用以下命令(热键)逐步浏览文件:

  • cont继续。
  • next转到下一个断点,
  • in进入,
  • out退出
  • pause暂停

让我们输入cont几次,看看我们如何从断点到断点:

debug> nextbreak in misc/debug.js:1> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;2 debugger;3debug> nextbreak in misc/debug.js:21 (function (exports, require, module, __filename, __dirname) { let a = 5;> 2 debugger;34 a *= 2;debug> nextbreak in misc/debug.js:42 debugger;3> 4 a *= 2;5 debugger;6

我们现在可以做的是,我们可以通过编写repl命令来检查此时的变量值。这将允许您编写变量名称并查看其值:

debug> replPress Ctrl + C to leave debug repl> a5> bundefined> cundefined>

你可能会看到我们现在有a = 5bc是未定义的。

当然,对于更复杂的调试,您可能需要使用一些外部工具(IDE、浏览器)。您可以阅读更多这里

NDB是Node.js的改进调试体验,由ChromeDevTools启用

https://github.com/GoogleChromeLabs/ndb

有很多方法可以调试,但我更喜欢使用Node js的内置调试器。

app.js档案

var fs = require('fs');
fs.readFile('test.txt', 'utf8', function (err, data) {
debugger;
if (err) throw err;
console.log(data); });

命令:node debug app.js

文件->首选项->设置->启用VS Code首选项自动附加搜索自动附加并设置打开,打开控制台(ctrl+*)或从菜单终端->新终端,在代码中设置断点,输入命令

node --inspect <name of your file>

这将开始调试,VS Code将显示调试菜单。

注意:如果您正在使用节点集群工作线程,自动附加也非常有用。

在其他答案中没有提到的另一个选择是使用名为Rookout的工具。它用于调试和从本地和远程应用程序获取数据。我们在正式生产环境中使用它将数据聚合到其他服务-为我们节省了很多麻烦和硬编码日志记录

您可以尝试捕获错误:

function yourFunc() {try {// YOUR CODE HERE} catch (err) {console.error(err.message + ", " + err.trace);}}

错误消息和错误跟踪将为您提供识别和纠正运行时错误所需的信息。

此方法对JS也对nodejs有效。您要检查的是debugger字。在浏览器中运行JS或Node js应用程序#1时。如果到达该行,执行将暂停,如下图所示。

输入图片描述

使用IDE

在WebStorm中,您只需打开package.json文件并从那里以DEBUG模式运行脚本。只需单击侧面的绿色播放按钮。

输入图片描述

with-检查

如果您想在没有IDE的情况下直接从CLI调试应用程序,那么您可以像node index.js --inspect一样运行脚本。默认情况下,它将侦听端口5858,允许您连接调试器。或者,您可以使用--inspect=5858指定不同的端口。

带有环境变量

  1. 创建一个如下所示的脚本myInspector.js
let inspector = require("inspector");
// you could explicitly specify a port.// or alternatively set it to 0 to get any available port.const port = 0;inspector.open(port, undefined, true);
// print the url which also reveals the port.const url = inspector.url()console.log(url);
  1. 设置环境变量NODE_OPTIONS="--require myInspector.js"
  2. 启动您的脚本。

事实上,这也是WebStorm注入检查器的方式。美妙的是,无论您使用哪个启动器,它都能正常工作。因此,您只需npm run ...node-ts ...,甚至可以使用一些. sh/. bat文件。

使用节点js的VS代码开发人员独占。启用内置调试

文件>首选项>设置>在搜索框中键入“自动附加”并设置调试器应如何附加[首选项仅与标志]自动附加启用

说魔法,你应该看看

自动连接激活

运行节点程序-检查你应该vs代码做她的工作:)

提示:您也可以通过启用始终过滤器而不使用--检查运行

请尝试有趣的方式来调试Node.js应用程序(不仅)使用智能日志

https://github.com/darky/the-most-convenient-debug