Ladění výpisů stavu systému Linux

Tento článek se vztahuje na: ✔️ .NET Core 3.0 SDK a novější verze

Shromažďování výpisů paměti v Linuxu

Tip

Nejčastější dotazy týkající se shromažďování, analýzy a dalších upozornění najdete v tématu Výpisy paměti: Nejčastější dotazy.

Mezi dva doporučené způsoby shromažďování výpisů paměti v Linuxu patří:

  • dotnet-dump Nástroj rozhraní příkazového řádku
  • Proměnné prostředí, které shromažďují výpisy stavu systému při chybových ukončeních

Analýza výpisů paměti v Linuxu

Po shromáždění výpisu paměti je možné ho dotnet-dump analyzovat pomocí nástroje s příkazem dotnet-dump analyze . Tento krok analýzy je potřeba spustit na počítači, který má stejnou architekturu a distribuci Linuxu jako prostředí, ve které se zachytával výpis paměti. Nástroj dotnet-dump podporuje zobrazování informací o kódu .NET, ale není užitečný pro pochopení problémů s kódem pro jiné jazyky, jako je C a C++.

Případně můžete LLDB použít k analýze výpisů paměti v Linuxu, což umožňuje analýzu spravovaného i nativního kódu. LLDB používá rozšíření SOS k ladění spravovaného kódu. Nástroj dotnet-sos rozhraní příkazového řádku se dá použít k instalaci SOS, který má mnoho užitečných příkazů pro ladění spravovaného kódu. K analýze výpisů paměti .NET Core vyžadují LLDB a SOS následující binární soubory .NET Core z prostředí, ve které byl výpis paměti vytvořen:

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (hostitel použitý ke spuštění aplikace)

Ve většině případů je možné tyto binární soubory stáhnout pomocí dotnet-symbol tohoto nástroje. Pokud se nezbytné binární soubory nedají stáhnout dotnet-symbol (například pokud byla používána privátní verze .NET Core sestavená ze zdroje), může být nutné zkopírovat výše uvedené soubory z prostředí, ve které se výpis paměti vytvořil. Pokud se soubory nenacházejí vedle souboru s výpisem paměti, můžete pomocí příkazu setclrpath <path> LLDB/SOS nastavit cestu, ze které se mají načíst, a setsymbolserver -directory <path> nastavit cestu, aby se hledala soubory symbolů.

Jakmile jsou k dispozici potřebné soubory, můžete výpis paměti načíst do LLDB zadáním hostitele dotnet jako spustitelného souboru pro ladění:

lldb --core <dump-file> <host-program>

V předchozím příkazu je cesta výpisu paměti k analýze a <host-program> je nativní program, <dump-file> který spustil aplikaci .NET Core. Obvykle se jedná o dotnet binární soubor, pokud není aplikace samostatná, v takovém případě se jedná o název aplikace bez rozšíření .dll .

Po spuštění LLDB může být nutné použít setsymbolserver příkaz k nasměrování na správné místo symbolu (setsymbolserver -ms k použití serveru symbolů Společnosti Microsoft nebo setsymbolserver -directory <path> k určení místní cesty). Pokud chcete načíst nativní symboly, spusťte loadsymbolspříkaz . V tomto okamžiku můžete k analýze výpisu paměti použít příkazy SOS.

Poznámka:

LLDB je možné nainstalovat pomocí příkazu sudo apt-get install lldb

Analýza výpisů paměti ve Windows

Výpisy paměti shromážděné z počítače s Linuxem je také možné analyzovat na počítači s Windows pomocí sady Visual Studio, Windbg nebo nástroje dotnet-dump . Visual Studio i Windbg můžou analyzovat nativní a spravovaný kód, zatímco dotnet-dump analyzuje jenom spravovaný kód.

Poznámka:

Visual Studio verze 16.8 a novější umožňuje otevřít a analyzovat výpisy linuxu generované v .NET Core 3.1.7 nebo novější.

Viz také