Welche Diagnosetools sind in .NET Core verfügbar?

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.

dotnet-sos

dotnet-sos installiert die SOS-Debuggerweiterung unter Linux und macOS (und unter Windows, wenn Sie Windbg/cdb verwenden).

PerfCollect

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.

Tutorials zur .NET Core-Diagnose

Schreiben eines eigenen Diagnosetools

Mithilfe der Clientbibliothek für die Diagnose können Sie ein eigenes benutzerdefiniertes Diagnosetool schreiben, das für Ihr Diagnoseszenario optimal geeignet ist. Informationen dazu finden Sie in der Referenz zur Microsoft.Diagnostics.NETCore.Client-API.

Debuggen eines Speicherverlusts

Tutorial: Debuggen eines Speicherverlusts. Hier wird erläutert, wie ein Speicherverlust gefunden wird. Das dotnet-counters-Tool wird zum Bestätigen des Verlusts und das dotnet-dump-Tool zur Diagnose des Verlusts verwendet.

Debuggen einer hohen CPU-Auslastung

Tutorial: Debuggen einer hohen CPU-Auslastung. Hier lernen Sie, wie Sie eine hohe CPU-Auslastung untersuchen. In diesem Tutorial wird das Tool dotnet-counters verwendet, um eine solche Auslastung zu bestätigen. Danach erfahren Sie, wie Sie das dotnet-trace-Hilfsprogramm für Leistungsanalysen oder perf in Linux verwenden, um das CPU-Auslastungsprofil zu erfassen und anzuzeigen.

Debuggen eines Deadlocks

Tutorial: Debuggen eines Deadlocks. Hier erfahren Sie, wie Sie das Tool dotnet-dump verwenden, um Threads und Sperren zu untersuchen.

Debuggen von ThreadPool-Mangel

Das Tutorial: Debuggen von threadPool-Mangel zeigt Ihnen, wie Sie die Tools dotnet-counters und dotnet-stack verwenden können, um ThreadPool-Mangel zu untersuchen.

Debuggen eines StackOverflow-Fehlers

Tutorial: Debuggen eines StackOverflow-Fehlers veranschaulicht, wie ein StackOverflowException unter Linux debuggt wird.

Debuggen von Linux-Abbildern

Debuggen von Linux-Abbildern erläutert das Sammeln und Analysieren von Abbildern unter Linux.

Messen der Leistung mithilfe von EventCounters

Tutorial: Messen der Leistung mithilfe von EventCounters in .NET zeigt, wie Sie die EventCounter-API zum Messen der Leistung in Ihrer .NET-App verwenden.