Jakie narzędzia diagnostyczne są dostępne na platformie .NET Core?

Oprogramowanie nie zawsze zachowuje się zgodnie z oczekiwaniami, ale platforma .NET Core ma narzędzia i interfejsy API, które ułatwiają szybkie i skuteczne diagnozowanie tych problemów.

Ten artykuł ułatwia znalezienie różnych potrzebnych narzędzi.

Debugery

Debugery umożliwiają interakcję z programem. Wstrzymanie, przyrostowe wykonywanie, badanie i wznawianie zapewnia wgląd w zachowanie kodu. Debuger to dobry wybór do diagnozowania problemów funkcjonalnych, które można łatwo odtworzyć.

Testowanie jednostek

Testowanie jednostkowe to kluczowy składnik ciągłej integracji i wdrażania wysokiej jakości oprogramowania. Testy jednostkowe zostały zaprojektowane tak, aby zapewnić wczesne ostrzeżenie podczas przerywania czegoś.

Instrumentacja w celu obserwowania

Platforma .NET obsługuje standardowe techniki instrumentacji w branży przy użyciu metryk, dzienników i rozproszonych śladów. Instrumentacja to kod dodawany do projektu oprogramowania w celu zarejestrowania tego, co robi. Te informacje można następnie zbierać w plikach, bazach danych lub w pamięci i analizować w celu zrozumienia sposobu działania programu programowego. Jest to często używane w środowiskach produkcyjnych do monitorowania problemów i diagnozowania ich. Środowisko uruchomieniowe platformy .NET ma wbudowaną instrumentację, którą można opcjonalnie włączyć i interfejsy API, które umożliwiają dodawanie niestandardowej instrumentacji wyspecjalizowanej dla aplikacji.

Metryki

Metryki to pomiary liczbowe rejestrowane w czasie w celu monitorowania wydajności i kondycji aplikacji. Metryki są często używane do generowania alertów w przypadku wykrycia potencjalnych problemów. Metryki mają bardzo niską wydajność i wiele usług konfiguruje je jako zawsze włączone dane telemetryczne.

Dzienniki

Rejestrowanie to technika, w której kod jest instrumentowany do tworzenia dziennika, rekord interesujących zdarzeń, które wystąpiły podczas uruchamiania programu. Często zestaw zdarzeń dziennika jest konfigurowany domyślnie i bardziej rozbudowane rejestrowanie można włączyć na żądanie, aby zdiagnozować konkretne problemy. Obciążenie wydajności jest zmienne w zależności od ilości rejestrowanych danych.

Rozproszone ślady

Śledzenie rozproszone to wyspecjalizowana forma rejestrowania, która ułatwia lokalizowanie błędów i problemów z wydajnością w aplikacjach rozproszonych na wielu maszynach lub procesach. Ta technika śledzi żądania przez aplikację korelując razem pracę wykonywaną przez różne składniki aplikacji i oddzielając ją od innej pracy, którą aplikacja może wykonywać dla współbieżnych żądań. Istnieje możliwość śledzenia każdego żądania i próbkowania można opcjonalnie stosować w celu ograniczenia obciążenia związanego z wydajnością.

Zrzuty

Zrzut to plik zawierający migawkę procesu podczas tworzenia. Mogą one być przydatne do badania stanu aplikacji na potrzeby debugowania.

Symbole

Symbole to mapowanie między kodem źródłowym a plikiem binarnym utworzonym przez kompilator. Są one często używane przez debugery platformy .NET do rozpoznawania numerów wierszy źródłowych, nazw zmiennych lokalnych i innych typów informacji diagnostycznych.

Zbieranie danych diagnostycznych w kontenerach

Te same narzędzia diagnostyczne, które są używane w niekontenerowanych środowiskach systemu Linux, mogą być również używane do zbierania diagnostyki w kontenerach. Wystarczy kilka zmian użycia, aby upewnić się, że narzędzia działają w kontenerze platformy Docker.

Narzędzia globalne diagnostyki platformy .NET Core

dotnet-counters

dotnet-counters to narzędzie do monitorowania wydajności na potrzeby monitorowania kondycji pierwszego poziomu i badania wydajności. Obserwuje ona wartości liczników wydajności opublikowane za pośrednictwem interfejsu EventCounter API. Na przykład możesz szybko monitorować elementy, takie jak użycie procesora CPU lub szybkość wyjątków zgłaszanych w aplikacji platformy .NET Core.

dotnet-dump

Narzędzie dotnet-dump to sposób zbierania i analizowania zrzutów podstawowych Windows i Linux bez natywnego debugera.

dotnet-gcdump

Narzędzie dotnet-gcdump to sposób zbierania zrzutów GC (modułu odśmiecenia pamięci) na żywo procesów platformy .NET.

dotnet-trace

Platforma .NET Core zawiera elementy nazywane EventPipe danymi diagnostycznymi, za pomocą których są uwidocznione dane diagnostyczne. Narzędzie dotnet-trace umożliwia korzystanie z interesujących danych profilowania z aplikacji, które mogą pomóc w scenariuszach, w których konieczne jest spowolnienie działania aplikacji.

dotnet-stack

Narzędzie dotnet-stack umożliwia szybkie drukowanie zarządzanych stosów dla wszystkich wątków w uruchomionym procesie platformy .NET.

dotnet-symbol

dotnet-symbol pobiera pliki (symbole, DAC/DBI, pliki hosta itp.) potrzebne do otwarcia podstawowego zrzutu lub minidump. Użyj tego narzędzia, jeśli potrzebujesz symboli i modułów, aby debugować plik zrzutu przechwycony na innej maszynie.

dotnet-sos

dotnet-sos instaluje rozszerzenie debugowania SOS w systemach Linux i macOS (i na Windows, jeśli używasz narzędzia Windbg/cdb).

PerfCollect

PerfCollect to skrypt powłoki bash, którego można użyć do zbierania śladów za pomocą perf polecenia i LTTng do bardziej szczegółowej analizy wydajności aplikacji platformy .NET działających w dystrybucjach systemu Linux.

Samouczki dotyczące diagnostyki platformy .NET Core

Pisanie własnego narzędzia diagnostycznego

Biblioteka klienta diagnostyki umożliwia pisanie własnego niestandardowego narzędzia diagnostycznego najlepiej dopasowanego do scenariusza diagnostycznego. Wyszukaj informacje w dokumentacji interfejsu API klienta Microsoft.Diagnostics.NETCore.Client.

Debugowanie przecieku pamięci

Samouczek: debugowanie przecieku pamięci przeprowadzi cię przez znalezienie przecieku pamięci. Narzędzie dotnet-counters służy do potwierdzania wycieku, a narzędzie dotnet-dump służy do diagnozowania wycieku.

Debugowanie wysokiego użycia procesora

Samouczek: debugowanie wysokiego użycia procesora CPU przeprowadzi Cię przez badanie wysokiego użycia procesora CPU. Używa narzędzia dotnet-counters w celu potwierdzenia wysokiego użycia procesora CPU. Następnie przeprowadzi Cię przez proces używania funkcji Trace for performance analysis utility (dotnet-trace) lub Linux perf do zbierania i wyświetlania profilu użycia procesora CPU.

Debugowanie zakleszczenia

Samouczek: debugowanie zakleszczenia pokazuje, jak za pomocą narzędzia dotnet-dump zbadać wątki i blokady.

Debugowanie funkcji ThreadPool Starvation

Samouczek: debugowanie głodu puli wątków pokazuje, jak używać narzędzi dotnet-counters i dotnet-stack w celu zbadania głodu ThreadPool.

Debugowanie witryny StackOverflow

Samouczek: debugowanie rozwiązania StackOverflow pokazuje, jak debugować element StackOverflowException w systemie Linux.

Debugowanie zrzutów systemu Linux

Debugowanie zrzutów systemu Linux wyjaśnia, jak zbierać i analizować zrzuty w systemie Linux.

Mierzenie wydajności przy użyciu usługi EventCounters

Samouczek: mierzenie wydajności przy użyciu usługi EventCounters na platformie .NET pokazuje, jak używać interfejsu EventCounter API do mierzenia wydajności w aplikacji platformy .NET.