Debugowanie zrzutów systemu Linux

Ten artykuł dotyczy: ✔️ zestaw .NET Core 3.0 SDK i nowsze wersje

Zbieranie zrzutów w systemie Linux

Napiwek

Aby uzyskać często zadawane pytania dotyczące zbierania zrzutów, analizy i innych zastrzeżeń, zobacz Zrzuty: często zadawane pytania.

Dwa zalecane sposoby zbierania zrzutów w systemie Linux to:

Analizowanie zrzutów w systemie Linux

Po zebraniu zrzutu można go przeanalizować za pomocą narzędzia za dotnet-dump analyze pomocą dotnet-dump polecenia . Ten krok analizy należy uruchomić na maszynie, która ma taką samą architekturę i dystrybucję systemu Linux, jak środowisko przechwytywane zrzutu. Narzędzie dotnet-dump obsługuje wyświetlanie informacji o kodzie platformy .NET, ale nie jest przydatne do zrozumienia problemów z kodem dla innych języków, takich jak C i C++.

Alternatywnie usługa LLDB może służyć do analizowania zrzutów w systemie Linux, co umożliwia analizę kodu zarządzanego i natywnego. Usługa LLDB używa rozszerzenia SOS do debugowania kodu zarządzanego. Narzędzie interfejsu dotnet-sos wiersza polecenia może służyć do instalowania sosu, który zawiera wiele przydatnych poleceń do debugowania kodu zarządzanego. Aby przeanalizować zrzuty platformy .NET Core, usługi LLDB i SOS wymagają następujących plików binarnych platformy .NET Core ze środowiska, w których utworzono zrzut:

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (host używany do uruchamiania aplikacji)

W większości przypadków te pliki binarne można pobrać przy użyciu dotnet-symbol narzędzia . Jeśli nie można pobrać niezbędnych plików binarnych (na przykład jeśli prywatna wersja platformy .NET Core skompilowana dotnet-symbol ze źródła była używana), może być konieczne skopiowanie plików wymienionych powyżej ze środowiska, w ramach którego utworzono zrzut. Jeśli pliki nie znajdują się obok pliku zrzutu, możesz użyć polecenia setclrpath <path> LLDB/SOS, aby ustawić ścieżkę, z której mają zostać załadowane, i setsymbolserver -directory <path> ustawić ścieżkę do wyszukiwania plików symboli.

Po udostępnieniu niezbędnych plików zrzut można załadować w usłudze LLDB, określając hosta dotnet jako plik wykonywalny do debugowania:

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

W poprzednim poleceniu jest ścieżką zrzutu do analizy i <host-program> jest natywnym programem, <dump-file> który uruchomił aplikację .NET Core. Zazwyczaj jest dotnet to plik binarny, chyba że aplikacja jest samodzielna, w takim przypadku jest to nazwa aplikacji bez rozszerzenia .dll .

Po uruchomieniu usługi LLDB może być konieczne użycie setsymbolserver polecenia , aby wskazać prawidłową lokalizację symboli (setsymbolserver -ms aby użyć serwera symboli firmy Microsoft lub setsymbolserver -directory <path> określić ścieżkę lokalną). Aby załadować symbole natywne, uruchom polecenie loadsymbols. W tym momencie możesz użyć poleceń SOS do przeanalizowania zrzutu.

Uwaga

Bazę danych LLDB można zainstalować za pomocą polecenia sudo apt-get install lldb

Analizowanie zrzutów w systemie Windows

Zrzuty zbierane z maszyny z systemem Linux można również analizować na maszynie z systemem Windows przy użyciu programu Visual Studio, Windbg lub narzędzia dotnet-dump . Zarówno program Visual Studio, jak i Windbg mogą analizować kod natywny i zarządzany, podczas gdy narzędzie dotnet-dump analizuje tylko zarządzany kod.

Uwaga

Program Visual Studio w wersji 16.8 lub nowszej umożliwia otwieranie i analizowanie zrzutów systemu Linux wygenerowanych na platformie .NET Core 3.1.7 lub nowszej.

  • Visual Studio — zobacz przewodnik debugowania zrzutu programu Visual Studio.
  • Windbg — zrzuty systemu Linux można debugować na windbg, korzystając z tych samych instrukcji , których należy użyć do debugowania zrzutu trybu użytkownika systemu Windows. Użyj wersji x64 windbg dla zrzutów zebranych ze środowiska systemu Linux x64 lub Arm64 i wersji x86 dla zrzutów zebranych ze środowiska x86 systemu Linux.
  • dotnet-dump — wyświetl zrzut przy użyciu polecenia dotnet-dump analyze . Użyj wersji x64 dotnet-dump dla zrzutów zebranych ze środowiska systemu Linux x64 lub Arm64 oraz wersji x86 zrzutów zebranych ze środowiska x86 systemu Linux.

Zobacz też

  • dotnet-sos , aby uzyskać więcej informacji na temat instalowania rozszerzenia SOS.
  • dotnet-symbol , aby uzyskać więcej informacji na temat instalowania i używania narzędzia pobierania symboli.
  • Repozytorium diagnostyki platformy .NET Core, aby uzyskać więcej informacji na temat debugowania, w tym przydatne często zadawane pytania.
  • Instalowanie usługi LLDB w celu uzyskania instrukcji dotyczących instalowania bazy danych LLDB w systemie Linux lub Mac.
  • Ćwiczenie i rozwiązywanie problemów w systemie Linux na potrzeby samouczka dotyczącego debugowania zrzutów awaryjnych w systemie Linux