提问人:Fabian Jakobs 提问时间:12/16/2009 最后编辑:Peter MortensenFabian Jakobs 更新时间:6/26/2023 访问量:549019
如何调试 Node.js 应用程序?
How do I debug Node.js applications?
问:
如何调试 Node.js 服务器应用程序?
现在,我主要使用带有如下打印语句的警报调试:
sys.puts(sys.inspect(someVariable));
必须有更好的调试方法。我知道 Google Chrome 有一个命令行调试器。此调试器是否也可用于 Node.js?
答:
作为 Google Chrome 开发者工具的一部分发布的 V8 调试器可用于调试 Node.js 脚本。有关其工作原理的详细说明,请参见 Node.js GitHub wiki。
评论
https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
Node-Inspector 可以挽救局面!从任何支持 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
评论
--debug
debug
--debug
debug
app is already running...
Node.js 中有内置的命令行调试器客户端。Cloud 9 IDE 也有相当不错的(可视化)调试器。
评论
如果您需要一个强大的 Node.js 日志库,Tracer https://github.com/baryon/tracer 是更好的选择。
它输出带有时间戳、文件名、方法名称、行号、路径或调用堆栈的日志消息,支持颜色控制台,并支持数据库、文件、流传输。我是作者。
我个人使用 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评论 - 使用实时模板,您还可以获得片段支持。
评论
假设您的计算机上安装了 node-inspector(如果没有,只需键入 'npm install -g node-inspector'),您只需运行:
node-inspector & node --debug-brk scriptFileName.js
并将命令行中的 URI 粘贴到 WebKit (Chrome / Safari) 浏览器中。
评论
调试
分析
node --prof ./app.js
node --prof-process ./the-generated-log-file
堆转储
火焰图
描图
伐木
输出调试信息的库
增强堆栈跟踪信息的库
标杆
- Apache 工作台:
ab -n 100000 -c 1 http://127.0.0.1:9778/
- WRK的
其他
遗产
这些过去可以工作,但不再维护或不再适用于新式节点版本。
- https://github.com/bnoordhuis/node-profiler - 替换为内置调试
- https://github.com/c4milo/node-webkit-agent - 替换为 Node Inspector
- https://nodetime.com/ - 已停产
评论
look
nprof
v8.log
node --prof
Theseus是Adobe研究的一个项目,它允许您在其开源编辑器Brackets中调试Node.js代码。它有一些有趣的功能,如实时代码覆盖率、追溯检查、异步调用树。
评论
我整理了一篇关于使用节点检查器的简短 Node.js 调试入门,供那些不确定从哪里开始的人使用。
有一个新的开源Nodeclipse项目(作为Eclipse插件或Enide Studio):
Nodeclipse在2013年Eclipse Top 10 NEW Plugins中成为#1。它使用修改后的 V8 调试器(来自 Google Chrome Developer Tools for Java)。
Nodeclipse是每个月初发布的免费开源软件。
为了完整起见:
PyCharm 3.0 + Node.js 插件提供了很棒的开发 + 运行 + 调试体验。
我最初的反应是几年前的视觉工作室。
因此,使用 GOOD by happy 是一个很好的日志记录包,但对于调试,请使用 Visual Studio。
原始回复(很久以前): 我会使用沃尔玛实验室的 GOOD。它将完成这项工作,并且非常灵活:
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 2012 或 2013 的 Node.js 工具包括调试器。此处的概述指出“Node.js Tools for Visual Studio 包括对调试节点应用的完整支持”。作为 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) // 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()
如果您使用的是 Atom IDE,则可以安装该软件包。node-debugger
使用您喜欢的浏览器调试器调试小型 Node.js 脚本的一种快速而肮脏的方法是使用 browserify。请注意,此方法不适用于任何需要本机 I/O 库的应用程序,但对于大多数小型脚本来说已经足够了。
$ npm install -g browserify
现在将所有调用移动到一个文件中并运行:var x = requires('x')
requires.js
$ browserify requires.js -s window -o bundle.js
(这里的缺点是,您必须移动或注释所有文件。requires
在 HTML 文件中包含 ,如下所示:bundle.js
<script type="text/javascript" src="bundle.js"></script>
现在在浏览器中加载文件,然后按 和 viola: debug in browser。F12
我编写了一种不同的方法来调试 Node.js 代码,它稳定且非常简单。它可在 https://github.com/s-a/iron-node 获得。
一个开源的跨平台可视化调试器。
安装:
npm install iron-node -g;
调试:
iron-node yourscript.js;
IntelliJ 非常适合 Node.js。
此外,IntelliJ 很好地支持“代码辅助”。
Visual Studio Code 具有非常好的 Node.js 调试支持。它是免费的、开源的和跨平台的,可以在 Linux、OS X 和 Windows 上运行。
你甚至可以调试咕噜咕噜和吞咽任务,如果你需要的话......
评论
这里有很多很好的答案,但我想补充我的观点(基于我的方法是如何演变的)
调试日志
让我们面对现实吧,我们都喜欢一个好的,有时效果很好,所以如果你不愿意离它太远,至少要用 Visionmedia 的调试在你的日志中添加一些闪光点。console.log('Uh oh, if you reached here, you better run.')
交互式调试
尽管控制台日志记录非常方便,但要进行专业调试,您需要卷起袖子并陷入困境。设置断点,单步执行代码,检查范围和变量,以查看导致这种奇怪行为的原因。正如其他人所提到的,节点检查器确实是蜜蜂的膝盖。它使用内置调试器可以完成所有操作,但使用熟悉的 Chrome DevTools 界面。 如果您像我一样使用 Webstorm,那么这里有一个方便的调试指南。
堆栈跟踪
默认情况下,我们无法跟踪事件循环(滴答周期)不同周期中的一系列操作。要解决这个问题,请查看 longjohn(但未在生产中!
内存泄漏
使用 Node.js,我们可以让服务器进程保持相当长的时间。如果您认为它出现了一些令人讨厌的泄漏,您会怎么做?使用 heapdump 和 Chrome DevTools 比较一些快照并查看更改内容。
有关一些有用的文章,请查看
如果您想观看视频,那么
- Netflix JS 讲座 - 在生产环境中调试 Node.js
- 来自跟踪工作组关于跟踪和调试 node.js 的有趣视频
- 关于节点检查器的 15 分钟视频内容丰富
无论选择哪种路径,只要确保了解调试方式即可
看着自己的麻烦,知道
你自己,而不是其他人,这是一件痛苦的事情索福克勒斯,阿贾克斯
NetBeans IDE 从 8.1 版开始支持 Node.js:
<...>
新功能亮点
Node.js 应用程序开发
- 新建 Node.js 项目向导
- 新建 Node.js Express 向导
- 增强的 JavaScript 编辑器
- 新增对运行 Node.js 应用程序的支持
- 新增了对调试 Node.js 应用程序的支持。
<...>
其他参考资料:
Visual Studio Code 将是我进行调试的选择。没有安装任何工具或东西的开销。
只需在 package.json 中设置应用的起点,VSCode 就会在解决方案中自动创建一个配置文件。它建立在 Electron 之上,像 Atom 这样的编辑器就是建立在 Electron 之上的。npm install
VS Code 提供与你可能拥有的类似的调试体验 在其他 IDE 中,如 VS、Eclipse 等。
评论
使用 Webstorm!它非常适合调试 Node.js 应用程序。它有一个内置的调试器。在此处查看文档:https://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html
从 6.3 版开始,Node 有自己的内置 GUI 调试器(使用 Chrome 的 DevTools)
只需传递检查器标志,就会向检查器提供一个 URL:
node --inspect server.js
您也可以通过传递来中断第一行。--inspect-brk
评论
node --inspect --debug-brk server.js
有很多可能性......
调试支持通常使用 v8 调试协议或更新的 Chrome 调试协议来实现。
Visual Studio Code 将在调试中为我们工作。
使用 --inspect 标志启动节点进程。
node --inspect index.js
,然后在 chrome 中打开。单击“打开 Node 专用 DevTools”链接或安装此 chrome 扩展程序以轻松打开 chrome DevTools。chrome://inspect
有关更多信息,请参阅此链接
使用此命令
DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
调试 Node.JS 应用程序的方法如下:
1)安装devtool并用它启动应用程序
npm install devtool -g --save
devtool server.js
这将在 Chrome 开发者模式下打开,因此您可以放置调试器点并进行测试。
2) 使用 Node-Inspector 进行调试
node-inspector
3) 使用 --debug 进行调试
node --debug app.js
使用 Chrome 版本 67.0.3396.62(+)
- 运行节点应用
节点 --inspect-brk=0.0.0.0:9229 服务器.js(服务器 js 文件名)
- 在 chrome 中浏览您的应用程序,例如“localhost:port”
- 打开 DevTools。
- 单击响应式设备图标旁边的节点图标。
将弹出另一个 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> next
break in misc/debug.js:1
> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;
2 debugger;
3
debug> next
break in misc/debug.js:2
1 (function (exports, require, module, __filename, __dirname) { let a = 5;
> 2 debugger;
3
4 a *= 2;
debug> next
break in misc/debug.js:4
2 debugger;
3
> 4 a *= 2;
5 debugger;
6
我们现在可以做的是,此时我们可以通过编写命令来检查变量值。这将允许您编写变量名称并查看其值:repl
debug> repl
Press Ctrl + C to leave debug repl
> a
5
> b
undefined
> c
undefined
>
你可能会看到,我们此刻有 和 和 是不确定的。a = 5
b
c
当然,对于更复杂的调试,您可能需要使用一些外部工具(IDE、浏览器)。您可以在此处阅读更多内容。
评论
debugger
c
ndb 是 Node.js 的改进调试体验,由 Chrome DevTools 启用
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);
}
}
错误消息和错误跟踪将为您提供识别和更正运行时 bug 所需的信息。
此方法对 JS 和 Node js 都有效。这是你要检查的词。运行 JS 或 Node js 应用时,请在浏览器中打开 inspect 元素
。如果到达该行,执行将暂停,如下图所示。debugger
使用 IDE
在 WebStorm 中,您只需打开 package.json 文件,然后从那里以 DEBUG 模式运行脚本。只需单击侧面的绿色播放按钮即可。
使用 --inspect
如果要在没有 IDE 的情况下直接从 CLI 调试应用程序,则可以像 .默认情况下,它将侦听端口 5858,从而允许你连接调试器。或者,您可以使用 指定其他端口。node index.js --inspect
--inspect=5858
使用环境变量
- 创建一个如下所示的脚本:
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);
- 设置环境变量
NODE_OPTIONS="--require myInspector.js"
- 启动脚本。
事实上,这也是 WebStorm 注入检查器的方式。美妙之处在于,无论您使用哪种发射器,它都可以工作。因此,您可以直接使用,甚至可以使用一些.sh / .bat文件。npm run ...
node-ts ...
专为使用 node js 的 VS code 开发人员提供。启用内置调试
文件>首选项>设置>在搜索框中键入“autoattach”并设置调试器应如何附加 [preferred onlyWithFlag]
说魔术,你应该看到
使用 --inspect 运行节点程序,您应该与代码:)
提示:您也可以通过启用 always filter 来不使用 --inspect 运行
请尝试使用智能日志调试 Node.js 应用程序(不仅如此)的有趣方式
评论
--inspect-brk
--inspect