Heim > Artikel > Web-Frontend > Einige schnelle und einfache Möglichkeiten zum Debuggen von Node.js-Programmen
Beim Debuggen von Programmen gibt es immer verschiedene Herausforderungen. Der asynchrone Workflow von Node.js erhöht die Komplexität dieses mühsamen Prozesses zusätzlich. Obwohl die V8-Engine einige Aktualisierungen vorgenommen hat, um den Zugriff auf asynchrone Stack-Traces zu erleichtern, treten in vielen Fällen Fehler nur im Hauptthread des Programms auf, was das Debuggen etwas erschwert. Wenn unser Node.js-Programm abstürzt, müssen wir uns häufig auf ein ausgefeiltes CLI-Tool verlassen, um den Core-Dump zu analysieren. In diesem Artikel stellen wir einige einfache Möglichkeiten zum Debuggen von Node.js-Programmen vor. [Video-Tutorial-Empfehlung:
node js-Tutorialconsole.log
-Anweisungen in unserem Code zu platzieren, aber das ist keine wirklich skalierbare Strategie in der Produktion. Möglicherweise müssen Sie etwas filtern und bereinigen oder eine konsistente Protokollierungsstrategie implementieren, um wichtige Informationen zu identifizieren. Um eine ordnungsgemäße protokollorientierte Debugging-Strategie zu implementieren, verwenden Sie Pinoconsole.log
语句,但这并不是生产中真正可扩展的策略。你可能需要进行一些过滤和清理,或者实施一致的日志记录策略,以便从中识别出重要的信息。
要实施适当的面向日志的调试策略,可以用 Pino或 Winston 之类的日志记录工具。这些将允许你设置日志级别(INFO
、 WARN
、ERROR
),它们允许你在本地打印详细的日志消息,同时在生产环境下仅打印严重的日志消息。你还可以将这些日志流式传输到聚合器或其他地方,例如 LogStash,Papertrail 甚至 Slack。
日志记录只能使我们了解程序为何无法按预期运行。对于复杂的调试,我们将希望使用断点来检查代码在执行时的行为。
为此,可以使用 Node Inspect。 Node Inspect 是 Node.js 附带的调试工具。它实际上只是程序的 Chrome DevTools 的实现,可让你添加断点、控制分步执行、查看变量、并遵循调用堆栈。
有两种方法启动 Node Inspect,但最简单的方法可能就是使用 --inspect-brk
标志来调用 Node.js 应用程序:
$ node --inspect-brk $your_script_name
启动程序后,前往 Chrome 浏览器中的 chrome://inspect
oder Winston und andere Protokollierungstools. Damit können Sie die Protokollebenen festlegen (INFO
, WARN
, ERROR
) und detaillierte Protokollmeldungen lokal ausdrucken In der Produktionsumgebung werden nur kritische Protokollmeldungen gedruckt. Sie können diese Protokolle auch an einen Aggregator oder anderswo streamen, beispielsweise LogStash, Papertrail oder sogar Slack.
Es gibt zwei Möglichkeiten, Node Inspect zu starten, aber der einfachste Weg ist wahrscheinlich, eine Node.js-Anwendung mit dem Flag --inspect-brk
aufzurufen: rrreee span >
chrome://inspect
, um Chrome DevTools aufzurufen. Mit Chrome DevTools haben Sie alles, was Sie zum Debuggen von JavaScript im Browser benötigen. Die nützlichste Funktion ist die Verwenden Sie eine unterstützte IDE
Viele moderne IDEs haben nicht nur die Möglichkeit, Programme auf irgendeine Weise zu starten, sondern unterstützen auch das Debuggen von Node-Programmen. Sie verfügen nicht nur über viele der Funktionen der Chrome DevTools, sondern auch über eigene Funktionen, wie z. B. die Möglichkeit, „Protokollpunkte zu erstellen“ und die Möglichkeit, mehrere Debug-Profile zu erstellen. Weitere Informationen zu diesen IDEs erhalten Sie im Node.js-Leitfaden für Inspector-Clients.
🎜Verwenden von NDB🎜🎜🎜🎜🎜Eine weitere Option besteht darin, 🎜ndb🎜 zu installieren, einen eigenständigen Debugger für Node.js, ähnlich wie DevTools im Browser, wie einen isolierten lokalen Debugger. Es verfügt außerdem über einige zusätzliche Funktionen, die in DevTools nicht verfügbar sind. Es unterstützt die lokale Bearbeitung, was bedeutet, dass Sie Ihren Code ändern und aktualisierte Logik erhalten können, die direkt von der Debugger-Plattform unterstützt wird. Dies ist nützlich für schnelle Iterationen. w🎜Angenommen, Ihr Programm stürzt aufgrund eines katastrophalen Fehlers (z. B. eines Speicherzugriffsfehlers) ab. Dies mag selten sein, kommt aber vor, insbesondere wenn Ihre Anwendung auf nativem Code basiert.
Um diese Art von Problem zu untersuchen, können Sie llnode verwenden. Wenn ein Programm abstürzt, kann llnode
JavaScript-Stack-Frames und -Objekte überprüfen, indem es sie Objekten auf der C/C++-Seite zuordnet. Um es nutzen zu können, benötigen Sie zunächst einen Core-Dump Ihres Programms. Dazu müssen Sie process.abort
anstelle von process.exit
verwenden, um den Prozess in Ihrem Code zu schließen. Wenn Sie process.abort
verwenden, generiert der Node-Prozess beim Beenden eine Core-Dump-Datei. llnode
可以通过将 JavaScript 堆栈框架和对象映射到 C/C++ 端的对象来检查它们。为了使用它,你首先需要程序的核心转储。为此你需要使用 process.abort
而不是process.exit
来关闭代码中的进程。当你使用 process.abort
时,Node 进程在退出时会生成一个核心转储文件。
为了更好地理解 llnode
可以提供的功能,这个视频演示了其一些功能。
除了上述所有以外,还建议用第三方软件包做进一步调试。
第一个被简单地称为 debug。使用 debug,你可以基于函数名或整个模块为日志消息分配特定的命名空间。然后可以通过特定的环境变量选择将哪些消息打印到控制台。
例如,这是一个 Node.js 服务器,它正在记录来自整个程序和中间件栈的几条消息,例如 sequelize
,express:application
和 express:router
:
如果我们将 DEBUG 环境变量设置为 express:router
并启动相同的程序,则仅显示标记为 express:router
的消息:
通过以这种方式过滤消息,可以深入研究程序单个部分的行为方式,而无需大幅度更改代码的日志记录。
trace 和 clarify 两个模块最好在一起配合使用。
trace
通过提供有关被调用的异步方法的更多详细信息来扩展你的异步栈跟踪,这是 Node.js 默认不提供的路线图。 clarify
llnode
bieten kann, dieses Video demonstriert einige seiner Funktionen .
Zusätzlich zu all dem werden auch Pakete von Drittanbietern für das weitere Debugging empfohlen.
sequelize
, express:application
und express:router
:🎜🎜🎜🎜Wenn wir die Umgebungsvariable DEBUG auf express:router
setzen und dasselbe Programm starten, werden nur Nachrichten mit dem Tag express:router
angezeigt: 🎜🎜🎜🎜Bestanden Filtern von Nachrichten in Auf diese Weise können Sie genauer untersuchen, wie sich einzelne Teile Ihres Programms verhalten, ohne die Protokollierung Ihres Codes drastisch ändern zu müssen. 🎜trace
Erweitert Ihren asynchronen Stack-Trace, indem er weitere Details zur aufgerufenen asynchronen Methode bereitstellt, eine Roadmap, die Node.js standardmäßig nicht bereitstellt. clarify
hilft, indem es alle Informationen aus den Stack-Traces entfernt, die für Node.js-Interna spezifisch sind. Dadurch können Sie sich ausschließlich auf Funktionsaufrufe für Ihr Programm konzentrieren. 🎜🎜Es wird nicht empfohlen, diese Module in einer Produktionsumgebung auszuführen! Sie sollten nur beim Debuggen in einer lokalen Entwicklungsumgebung aktiviert werden. 🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Programmierunterricht🎜! ! 🎜🎜Das obige ist der detaillierte Inhalt vonEinige schnelle und einfache Möglichkeiten zum Debuggen von Node.js-Programmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!