Debuggen von Linux-Sicherungskopien

Dieser Artikel gilt für: ✔️ .NET Core 3.0 SDK und neuere Versionen

Erfassen von Speicherabbildern unter Linux

Tipp

Häufig gestellte Fragen zur Erfassung von Speicherabbildern, zur Analyse und zu anderen Einschränkungen finden Sie unter Speicherabbilder: Häufig gestellte Fragen.

Es gibt zwei empfohlene Methoden für das Erfassen von Speicherabbildern unter Linux:

Analysieren von Speicherabbildern unter Linux

Nachdem ein Speicherabbild erfasst wurde, kann es mithilfe des dotnet-dump-Tools mit dem Befehl dotnet-dump analyze analysiert werden. Dieser Analyseschritt muss auf einem Computer ausgeführt werden, der über dieselbe Architektur und Linux-Distribution wie die Umgebung verfügt, in der das Speicherabbild erfasst wurde. Das dotnet-dump-Tool unterstützt die Anzeige von Informationen zu .NET-Code, eignet sich jedoch nicht dazu, Codeprobleme für andere Sprachen wie C und C++ zu verstehen.

Alternativ kann LLDB zum Analysieren von Speicherabbildern unter Linux verwendet werden. Dies ermöglicht die Analyse sowohl von verwaltetem als auch von nativem Code. LLDB verwendet die SOS-Erweiterung zum Debuggen von verwaltetem Code. Das CLI-Tool dotnet-sos kann zum Installieren der SOS-Erweiterung verwendet werden, die viele nützliche Befehle zum Debuggen von verwaltetem Code enthält. Zum Analysieren von .NET Core-Speicherabbildern benötigen LLDB und SOS die folgenden .NET Core-Binärdateien aus der Umgebung, in der das Speicherabbild erstellt wurde:

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (der Host, der zum Starten der App verwendet wird)

In den meisten Fällen können diese Binärdateien mit dem Tool dotnet-symbol heruntergeladen werden. Wenn die erforderlichen Binärdateien nicht mit dotnet-symbol heruntergeladen werden können (z. B. wenn eine vollständig selbst erstellte private Version von .NET Core verwendet wurde), müssen die oben aufgeführten Dateien möglicherweise aus der Umgebung kopiert werden, in der das Speicherabbild erstellt wurde. Wenn sich diese Dateien nicht am selben Ort wie die Speicherabbilddatei befinden, können Sie über den LLDB-/SOS-Befehl setclrpath <path> den Pfad festlegen, von dem sie geladen werden sollen, und über setsymbolserver -directory <path> den Pfad, unter dem nach Symboldateien gesucht werden soll.

Sobald die erforderlichen Dateien verfügbar sind, kann das Speicherabbild in LLDB geladen werden, indem der dotnet-Host als die zu debuggende ausführbare Datei angegeben wird:

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

In der vorherigen Befehlszeile ist <dump-file> der Pfad des Speicherabbilds, das analysiert werden soll, und <host-program> das native Programm, das die .NET Core-Anwendung gestartet hat. Dabei handelt es sich in der Regel um die Binärdatei dotnet, außer die App ist eigenständig. In diesem Fall wird der Name der Anwendung ohne die Erweiterung .dll angegeben.

Nach dem Start von LLDB muss möglicherweise der Befehl setsymbolserver verwendet werden, um auf den richtigen Symbolspeicherort zu verweisen (setsymbolserver -ms für den Symbolserver von Microsoft oder setsymbolserver -directory <path> zum Angeben eines lokalen Pfads). Führen Sie loadsymbols aus, um native Symbole zu laden. Nun können Sie SOS-Befehle verwenden, um das Speicherabbild zu analysieren.

Hinweis

LLDB kann mit dem Befehl sudo apt-get install lldb installiert werden

Analysieren von Speicherabbildern unter Windows

Von einem Linux-Computer erfasste Speicherabbilder können auch auf einem Windows-Computer mit Visual Studio, Windbg oder dem Tool dotnet-dump analysiert werden. Sowohl Visual Studio als auch Windbg können nativen und verwalteten Code analysieren, während dotnet-dump nur verwalteten Code analysiert.

Hinweis

Mithilfe von Visual Studio, Version 16.8 und höher können Sie Linux-Speicherabbilder öffnen und analysieren, die unter .NET Core 3.1.7 oder höher erstellt wurden.

  • Visual Studio: Weitere Informationen finden Sie im Leitfaden zum Debuggen von Speicherabbildern in Visual Studio.
  • Windbg: Sie können Linux-Speicherabbilder in windbg mithilfe derselben Anweisungen debuggen, die Sie zum Debuggen eines Speicherabbilds im Windows-Benutzermodus verwenden würden. Verwenden Sie die x64-Version von windbg für Speicherabbilder, die aus einer Linux x64- oder Arm64-Umgebung erfasst wurden, und die x86-Version für Speicherabbilder, die aus einer Linux x86-Umgebung gesammelt wurden.
  • dotnet-dump: Zeigen Sie das Speicherabbild mit dem Befehl dotnet-dump analyze an. Verwenden Sie die x64-Version von dotnet-dump für Speicherabbilder, die aus einer Linux x64- oder Arm64-Umgebung erfasst wurden, und die x86-Version für Speicherabbilder, die aus einer Linux x86-Umgebung gesammelt wurden.

Weitere Informationen