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 es Ihnen, mit Ihrem Programm zu interagieren. Das Anhalten, inkrementelle Ausführung, Untersuchen und Fortsetzen gibt Ihnen Einblick in das Verhalten Ihres Codes. Ein Debugger ist eine gute Wahl für die Diagnose funktionaler Probleme, die leicht reproduziert werden können.

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 zur Beobachtbarkeit

.NET unterstützt Branchenstandardinstrumentationstechniken mithilfe von Metriken, Protokollen und verteilten Ablaufverfolgungen. Die Instrumentierung ist Code, der einem Softwareprojekt hinzugefügt wird, um zu erfassen, was es tut. Diese Informationen können dann in Dateien, Datenbanken oder im Arbeitsspeicher gesammelt und analysiert werden, um zu verstehen, wie ein Softwareprogramm ausgeführt wird. Dies wird häufig in Produktionsumgebungen verwendet, um Probleme zu überwachen und zu diagnostizieren. Die .NET-Runtime verfügt über integrierte Instrumentierung, die optional aktiviert werden kann, und APIs, mit denen Sie benutzerdefinierte Instrumentierung für Ihre Anwendung hinzufügen können.

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 verfügen über sehr geringen Leistungsaufwand und viele Dienste konfigurieren diese als immer aktivierte Telemetrie.

Protokolle

Bei der Protokollierung handelt es sich um eine Technik, bei der Code so instrumentiert wird, dass ein Protokoll erstellt wird, ein Datensatz interessanter Ereignisse, die während der Ausführung des Programms aufgetreten sind. Häufig wird ein Basissatz von Protokollereignissen standardmäßig konfiguriert, und eine umfangreichere Protokollierung kann bei Bedarf aktiviert werden, um bestimmte Probleme zu diagnostizieren. Leistungsaufwand ist abhängig davon, wie viel Daten protokolliert werden.

Verteilte Ablaufverfolgungen

Die verteilte Ablaufverfolgung ist eine spezielle Form der Protokollierung, mit der Sie Fehler und Leistungsprobleme innerhalb von Anwendungen lokalisieren können, die auf mehreren Computern oder Prozessen 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 und jedes Sampling zu verfolgen, kann optional verwendet werden, um den Leistungsaufwand zu binden.

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

Mit dem Dotnet-Stack-Tool können Sie die verwalteten Stapel für alle Threads in einem ausgeführten .NET-Prozess schnell drucken.

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

Lernprogramm: DebugthreadPool-Starvation zeigt Ihnen, wie Sie die Dotnet-Counters und dotnet-stack Tools verwenden, um ThreadPool-Starvation 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.