Heim > Web-Frontend > js-Tutorial > Hauptteil

Einige schnelle und einfache Möglichkeiten zum Debuggen von Node.js-Programmen

青灯夜游
Freigeben: 2020-08-31 10:30:06
nach vorne
2358 Leute haben es durchsucht

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-Tutorial

]Protokollierung

Natürlich gibt es keine Entwicklungs-Toolbox, die keine Protokolle bereitstellt. Bei der lokalen Entwicklung neigen wir dazu, console.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 语句,但这并不是生产中真正可扩展的策略。你可能需要进行一些过滤和清理,或者实施一致的日志记录策略,以便从中识别出重要的信息。

要实施适当的面向日志的调试策略,可以用 PinoWinston 之类的日志记录工具。这些将允许你设置日志级别(INFOWARNERROR),它们允许你在本地打印详细的日志消息,同时在生产环境下仅打印严重的日志消息。你还可以将这些日志流式传输到聚合器或其他地方,例如 LogStash,Papertrail 甚至 Slack。

使用 Node Inspect 和 Chrome DevTools

日志记录只能使我们了解程序为何无法按预期运行。对于复杂的调试,我们将希望使用断点来检查代码在执行时的行为。

为此,可以使用 Node Inspect。 Node Inspect 是 Node.js 附带的调试工具。它实际上只是程序的 Chrome DevTools 的实现,可让你添加断点、控制分步执行、查看变量、并遵循调用堆栈。

有两种方法启动 Node Inspect,但最简单的方法可能就是使用 --inspect-brk 标志来调用 Node.js 应用程序:

$ node --inspect-brk $your_script_name
Nach dem Login kopieren

Einige schnelle und einfache Möglichkeiten zum Debuggen von Node.js-Programmen

启动程序后,前往 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.

Mit Node Inspect und Chrome DevToolsDurch die Protokollierung können wir lediglich verstehen, warum das Programm nicht wie erwartet ausgeführt wird. Für komplexes Debuggen möchten wir Haltepunkte verwenden, um zu untersuchen, wie sich der Code bei der Ausführung verhält.

Hierfür können Sie Node Inspect verwenden. Node Inspect ist ein Debugging-Tool, das mit Node.js geliefert wird. Es handelt sich eigentlich nur um eine Implementierung von Chrome DevTools

, mit der Sie Haltepunkte hinzufügen können , steuern Sie die schrittweise Ausführung, zeigen Sie Variablen an und folgen Sie dem Aufrufstapel.

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 >

Nach dem Starten des Programms gehen Sie im Chrome-Browser zur URL 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

Möglichkeit, den Speicher zu überprüfen

. Sie können „einen Heap-Snapshot erstellen“ und die Speichernutzung konfigurieren, um zu verstehen, wie Speicher zugewiesen wird und mögliche Speicherlecks auftreten.

Einige schnelle und einfache Möglichkeiten zum Debuggen von Node.js-ProgrammenVerwenden 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🎜

Postmortem-Debugging

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 可以提供的功能,这个视频演示了其一些功能

有用的 Node 模块

除了上述所有以外,还建议用第三方软件包做进一步调试。

debug

第一个被简单地称为 debug。使用 debug,你可以基于函数名或整个模块为日志消息分配特定的命名空间。然后可以通过特定的环境变量选择将哪些消息打印到控制台。

例如,这是一个 Node.js 服务器,它正在记录来自整个程序和中间件栈的几条消息,例如 sequelizeexpress:applicationexpress:router

Einige schnelle und einfache Möglichkeiten zum Debuggen von Node.js-Programmen

如果我们将 DEBUG 环境变量设置为 express:router 并启动相同的程序,则仅显示标记为 express:router 的消息:

Einige schnelle und einfache Möglichkeiten zum Debuggen von Node.js-Programmen

通过以这种方式过滤消息,可以深入研究程序单个部分的行为方式,而无需大幅度更改代码的日志记录。

trace  与 clarify

traceclarify 两个模块最好在一起配合使用。

trace 通过提供有关被调用的异步方法的更多详细信息来扩展你的异步栈跟踪,这是 Node.js 默认不提供的路线图。 clarify

Um besser zu verstehen, was llnode bieten kann, dieses Video demonstriert einige seiner Funktionen

.

Nützliche Node-Module

Zusätzlich zu all dem werden auch Pakete von Drittanbietern für das weitere Debugging empfohlen.

debug


Der erste heißt einfach Debug. Mithilfe von Debug können Sie Protokollmeldungen bestimmte Namespaces zuweisen, die auf Funktionsnamen oder ganzen Modulen basieren. Welche Meldungen dann auf der Konsole ausgegeben werden, kann über bestimmte Umgebungsvariablen ausgewählt werden. 🎜🎜Dies ist beispielsweise ein Node.js-Server, der mehrere Nachrichten vom gesamten Programm- und Middleware-Stack protokolliert, wie zum Beispiel sequelize, express:application und express:router:🎜🎜 4 .png🎜🎜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. 🎜

verfolgen und klären

🎜
Trace🎜 und clarify🎜 werden am besten zusammen verwendet. 🎜🎜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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!