如何调试 Node.js 服务器应用程序?
现在我主要使用带有打印语句的警报调试,如下所示:
sys.puts(sys.inspect(someVariable));
必须有更好的调试方法。我知道 Google Chrome 有一个命令行调试器。这个调试器是否也可用于 Node.js?
--inspect-brk
INSTEAD OF --inspect
运行 nod。请参阅stackoverflow.com/questions/59596138
node-inspector 可以挽救这一天!在任何支持 WebSocket 的浏览器中使用它。断点、分析器、实时编码等……真是太棒了。
安装它:
npm install -g node-inspector
然后运行:
node-debug app.js
调试
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/ - 已失效
look
模块,如 stackoverflow.com/questions/12864221/nodejs-memory-profiling 中所指出的
node --prof
的 nprof
+ v8.log
。
作为 Google Chrome Developer Tools 的一部分发布的 V8 调试器可用于调试 Node.js 脚本。可以在 Node.js GitHub wiki 中找到有关其工作原理的详细说明。
https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
从 6.3 版开始,Node 有自己的内置 GUI 调试器(使用 Chrome 的 DevTools)
https://i.stack.imgur.com/eZAzW.png
只需传递检查器标志,您将获得检查器的 URL:
node --inspect server.js
您也可以通过传递 --inspect-brk
在第一行中断。
Node.js 版本 0.3.4+ 具有内置的调试支持。
node debug script.js
手册:http://nodejs.org/api/debugger.html
--debug
更改为 debug
而不使用破折号。这就是我最终让它工作的方式。令人困惑的是,--debug
和 debug
做了两件不同的事情。
app is already running...
”,当我尝试继续并遇到一个试图获取输入的语句时,它会将我退回到调试提示符,而不是让我输入所需的输入。
Visual Studio Code 将是我的调试选择。没有安装任何工具或 npm install
东西的开销。只需在 package.json 中设置应用程序的起点,VSCode 就会自动在您的解决方案中创建一个配置文件。它建立在 Electron 之上,而 Atom 等编辑器也是在 Electron 之上构建的。
VS Code 提供了与其他 IDE(如 VS、Eclipse 等)类似的调试体验。
https://i.stack.imgur.com/gxSUW.png
我个人使用 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 评论 - 使用实时模板,您还可以获得片段支持。
这里有很多很好的答案,但我想添加我的观点(基于我的方法如何演变)
调试日志
面对现实吧,我们都喜欢好的 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
看到自己的麻烦并知道自己和其他人都没有做到这一点是一件痛苦的事情索福克勒斯,阿贾克斯
Theseus 是 Adobe Research 的一个项目,可让您在其开源编辑器 Brackets 中调试您的 Node.js 代码。它有一些有趣的特性,比如实时代码覆盖、追溯检查、异步调用树。
https://i.stack.imgur.com/ZXwGD.png
Node.js Tools for Visual Studio 2012 或 2013 包含调试器。概述 here 指出“Visual Studio 的 Node.js 工具包括对调试节点应用程序的完全支持。”。作为 Node.js 的新手,但有 .NET 的背景,我发现这个插件是调试 Node.js 应用程序的好方法。
Visual Studio Code 具有非常好的 Node.js 调试支持。它是免费、开源和跨平台的,可在 Linux、OS X 和 Windows 上运行。
您甚至可以调试 grunt and gulp tasks,如果您需要...
我编写了一种不同的方法来调试 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;
使用 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
我创建了一个名为 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()
Node.js 中有内置的命令行 debugger client。 Cloud 9 IDE 也有很好的(视觉)debugger。
使用网络风暴!它非常适合调试 Node.js 应用程序。它有一个内置的调试器。在此处查看文档:https://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html
如果您需要一个强大的 Node.js 日志库,Tracer https://github.com/baryon/tracer 是更好的选择。
它输出带有时间戳、文件名、方法名、行号、路径或调用堆栈的日志消息,支持彩色控制台,并轻松支持数据库、文件、流传输。我是作者。
假设您的计算机上安装了 node-inspector(如果没有,只需键入“npm install -g node-inspector”),您只需运行:
node-inspector & node --debug-brk scriptFileName.js
并将命令行中的 URI 粘贴到 WebKit (Chrome / Safari) 浏览器中。
有很多可能性...
节点包括一个调试实用程序
节点检查器
代码编辑器/IDE(请参阅以下其中一项的调试说明)Atom、VSCode Webstorm 等
原子,
VSCode
网络风暴
和更多
调试支持通常使用 v8 Debugging Protocol 或更新的 Chrome Debugging Protocol 实现。
有新的开源 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。
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。
使用此命令
DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
node-debug -p 8888 scriptFileName.js
不定期副业成功案例分享