Software verhält sich nicht immer erwartungsgemäß, .NET Core verfügt jedoch über Tools und APIs, mit denen Sie diese Probleme schnell und effektiv diagnostizieren können.
Dieser Artikel hilft Ihnen bei der Suche nach den verschiedenen Tools, die Sie benötigen.
Debugger
Debugger ermöglichen Ihnen die Interaktion mit dem Programm. Durch Anhalten, inkrementelles Ausführen, Untersuchen und Fortsetzen erhalten Sie Erkenntnisse über das Verhalten Ihres Codes. Ein Debugger ist eine gute Wahl für die Diagnose funktionaler Probleme, die sich leicht reproduzieren lassen.
Komponententest
Komponententests sind eine wichtige Komponente von Continuous Integration und der Bereitstellung hochwertiger Software. Komponententests sollen Sie früh warnen, wenn Sie etwas unterbrechen.
Instrumentierung für Einblicke
.NET unterstützt Instrumentierungsmethoden nach Branchenstandards mithilfe von Metriken, Protokollen und verteilten Ablaufverfolgungen. Instrumentierung ist Code, der einem Softwareprojekt hinzugefügt wird, um aufzuzeichnen, was es tut. Diese Informationen können dann in Dateien, Datenbanken oder In-Memory gesammelt und analysiert werden, um zu verstehen, wie ein Softwareprogramm funktioniert. Dies wird häufig in Produktionsumgebungen verwendet, um auf Probleme zu überwachen und diese zu diagnostizieren. Die .NET-Runtime verfügt über integrierte Instrumentierung, die optional aktiviert werden kann, sowie APIs, mit denen Sie benutzerdefinierte Instrumentierung hinzufügen können, die auf Ihre Anwendung spezialisiert ist.
Metriken
Metriken sind numerische Messungen, die im Laufe der Zeit aufgezeichnet werden, um die Leistung und Integrität der Anwendung zu überwachen. Metriken werden häufig verwendet, um Warnungen zu generieren, wenn potenzielle Probleme erkannt werden. Metriken haben einen sehr geringen Leistungsaufwand, und viele Dienste konfigurieren sie als ständig aktive Telemetrie („Always-On“).
Protokolle
Protokollierung ist eine Methode, mit der Code so instrumentiert wird, dass ein Protokoll erstellt wird – eine Aufzeichnung interessanter Ereignisse, die während der Programmausführung aufgetreten sind. Häufig ist ein Baselinesatz von Protokollereignissen standardmäßig als aktiv konfiguriert, und eine umfangreichere Protokollierung kann bei Bedarf aktiviert werden, um bestimmte Probleme zu diagnostizieren. Der Leistungsaufwand variiert in Abhängigkeit davon, wie viele Daten protokolliert werden.
Verteilte Ablaufverfolgungen
Verteilte Ablaufverfolgung ist eine spezialisierte Form der Protokollierung, die Ihnen bei der Lokalisierung von Fehlern und Leistungsproblemen innerhalb von Anwendungen hilft, die über mehrere Computer oder Prozesse verteilt sind. Diese Technik verfolgt Anforderungen durch eine Anwendung nach, indem sie die von verschiedenen Anwendungskomponenten geleistete Arbeit miteinander korreliert und sie von anderer Arbeit trennt, die die Anwendung möglicherweise für gleichzeitige Anforderungen leistet. Es ist möglich, jede Anforderung nachzuverfolgen, und Stichprobenentnahme kann optional verwendet werden, um den Leistungsaufwand zu begrenzen.
Dumps
Ein Speicherabbild ist eine Datei, die zum eine Momentaufnahme des Prozesses zum Zeitpunkt der Erstellung enthält. Dieses kann hilfreich sein, wenn Sie den Zustand Ihrer Anwendung zu Debuggingzwecken überprüfen möchten.
Symbole
Symbole sind eine Zuordnung zwischen dem Quellcode und der vom Compiler erzeugten Binärdatei. Diese werden häufig von .NET-Debuggern verwendet, um Quellzeilennummern, Namen lokaler Variablen und andere Arten von Diagnoseinformationen aufzulösen.
Sammeln von Diagnosen in Containern
Dieselben Diagnosetools, die in nicht-containerisierten Linux-Umgebungen verwendet werden, können auch verwendet werden, um Diagnosen in Containern zu sammeln. Es sind nur ein paar Nutzungsänderungen erforderlich, um sicherzustellen, dass die Tools in einem Docker-Container funktionieren.
Globale .NET Core-Diagnosetools
dotnet-counters
dotnet-counters ist ein Tool zur Leistungsüberwachung der Integrität auf erster Ebene und zur Leistungsuntersuchung. Es überwacht die Werte des Leistungsindikators, die über die EventCounter-API veröffentlicht wurden. Sie können beispielsweise den CPU-Verbrauch oder die Anzahl ausgelöster Ausnahmen in Ihrer .NET Core-Anwendung überwachen.
dotnet-dump
Mit dem Tool dotnet-dump können Sie Windows- und Linux-Kernspeicherabbilder ohne nativen Debugger erfassen und analysieren.
dotnet-gcdump
Mit dem Tool dotnet-gcdump können Sie GC-Speicherabbilder (Garbage Collector) aus .NET-Liveprozessen erfassen.
dotnet-trace
.NET Core schließt EventPipe ein, worüber Diagnosedaten bereitgestellt werden. Mit dem Tool dotnet-trace können Sie relevante Daten für die Profilerstellung in Ihrer App nutzen. Diese können hilfreich sein, wenn Sie die Ursache für langsame Apps ermitteln müssen.
dotnet-stack
Das Tool dotnet-stack ermöglicht die schnelle Ausgabe der verwalteten Stapel für alle Threads in einem laufenden .NET-Prozess.
dotnet-symbol
dotnet-symbol lädt Dateien (Symbole, DAC/DBI, Hostdateien usw.) herunter, die benötigt werden, um ein zentrales Kernabbild oder Miniabbild zu öffnen. Verwenden Sie dieses Tool, wenn Sie Symbole und Module benötigen, um eine auf einem anderen Computer erfasste Abbilddatei zu debuggen.
Perfcollect ist ein Bash-Skript, das Sie verwenden können, um Ablaufverfolgungen mit perf und LTTng für eine ausführlichere Leistungsanalyse von .NET-Apps zu erfassen, die unter Linux-Distributionen ausgeführt werden.
Nutzen Sie „Web App Down“, „Absturzüberwachung“ und „Ask Genie“ zur Problembehandlung. Mithilfe dieser Tools können Sie die Verfügbarkeit von Anwendungen und Plattformen überwachen, Ausnahmefehler identifizieren, Speicherabbilder und Aufruflisten erfassen sowie Bereiche von Untersuchung und Diagnose finden.
Erstellen von End-to-End-Lösungen in Microsoft Azure zum Erstellen von Azure Functions-Lösungen, Implementieren und Verwalten von Web-Apps, Entwickeln von Lösungen mit Azure Storage u. v. m.