Diagnostické nástroje pro .NET Core 3.0
Článek se vztahuje k verzi produktu .NET Core 3.0
Tento článek byl napsán v roce 2019. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.
.NET Core 3.0 podporuje balík nových diagnostických nástrojů, které mají vývojáři zdarma k dispozici a které umožňují snadno diagnostikovat .NET Core aplikace.
Global Tools
Diagnostické nástroje fungují pouze pro aplikace, které běží nad .NET Core 3.0. Aplikace automaticky emitují různé metriky nebo události, které umí sbírat tzv. global tools a následně je vizualizovat v konzoli. Každý global tool je nutné separátně instalovat.
dotnet-counters
Tento nástroj umí pracovat s metrikami .NET Core aplikace a ukázat v reálném čase využití CPU, operační paměti a garbage collectoru. Instalovat je můžete příkazem:
dotnet tool install --global dotnet-counters
dotnet-trace
Nástroj dotnet-trace pracuje s událostmi (diag traces), které jsou sbírány skrze Windows Event Tracing nebo LTTng na Linuxu. Spuštěním nástroje dojde k profilování aplikace a vytvoření netperf souboru, který lze analyzovat v PerfView. Pro linux a mac lze netperf konvertovat do formátu speedscope (JSON) a analyzovat jej v aplikaci speedscope online. Nástroj můžete instalovat příkazem:
dotnet tool install --global dotnet-dump
dotnet-dump
Zatím pouze pro Windows a Linux můžete použít nástroj dotnet-dump, který umí vytvořit dump vybraného procesu.
dotnet tool install --global dotnet-dump
Na linuxu je oproti Windows dostupná i podpora analýzy dumpu příkazem:
dotnet dump analyze dump-name
LLDB
Pro vývojáře v prostředí Linuxu a macOS se nabízí také využití nástroje LLDB. Pomocí něj se lze připojit k .NET Core procesu a analyzovat jej. K tomu je potřeba SOS plugin, který lze opět instalovat jako dotnet global tool:
dotnet tool install -g dotnet-sos
Abyste nemuseli plugin do LLDB pokaždé připojovat, stačí provolat:
dotnet-sos install
a po dalším spuštění LLDB se automaticky zpřístupní i SOS. Řada příkazů z SOS se navíc zpřístupní skrze aliasy přímo v LLDB.
V LLDB lze dále nastavit symbol server zavoláním příkazu
setsymbolserver -ms
Více o diagnostických nástrojích včetně příkladů se dočtete na GitHubu.