Sdílet prostřednictvím


Ladění paměťových výpisů Linuxu

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

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

Návod

Nejčastější dotazy týkající se shromažďování výpisů, jejich analýzy a dalších úskalí si můžete přečíst v Výpisy paměti: Nejčastější dotazy.

Dva doporučené způsoby shromažďování výpisů paměti v Linuxu jsou:

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. Za účelem ladění spravovaného kódu LLDB využívá rozšíření SOS. 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 pomocí 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ém 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 soubory se symboly hledaly.

Jakmile jsou k dispozici potřebné soubory, můžete výpis načíst do LLDB specifikováním dotnet hostu jako programu pro ladění.

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

V předchozím příkazu je <dump-file> cesta k výpisu paměti pro analýzu a <host-program> je nativní program, který spustil aplikaci .NET Core. Obvykle se jedná o dotnet binární soubor, pokud není aplikace samostatně obsažená, 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ší.

  • Visual Studio – Viz průvodce laděním výpisu stavu systému Visual Studio.
  • Windbg – Pomocí stejných pokynů , které byste použili k ladění výpisu stavu systému Windows v uživatelském režimu, můžete ladit výpisy systému Linux na windbg. Použijte verzi x64 windbg pro výpisy paměti z prostředí Linux x64 nebo Arm64 a verzi x86 pro výpisy paměti z prostředí Linux x86.
  • dotnet-dump – Zobrazte výpis pomocí příkazu dotnet-dump analyze. Použijte x64 verzi dotnet-dump pro výpisy shromážděné z prostředí Linux x64 nebo Linux Arm64 a verzi x86 pro výpisy shromážděné z prostředí Linux x86.

Viz také