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:
- das CLI-Tool
dotnet-dump
- Umgebungsvariablen, die Abbilder bei Abstürzen erfassen
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:
- libmscordaccore.so
- libcoreclr.so
- 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
- Unter dotnet-sos finden Sie weitere Details zur Installation der SOS-Erweiterung.
- Unter dotnet-symbol finden Sie weitere Details zur Installation und Verwendung des Symboldownloadtools.
- Im .NET Core-Diagnoserepository finden Sie weitere Details zum Debuggen, einschließlich hilfreicher häufig gestellter Fragen.
- Unter Installieren von LLDB finden Sie Anleitungen zur Installation von LLDB für Linux oder Mac.
- Unter Übersicht über ASP.NET Core bei der Linux-Problembehandlung finden Sie ein Tutorial zum Debuggen von Absturzabbildern unter Linux.