Linux-memóriaképek hibakeresése
Ez a cikk a következőre vonatkozik: ✔️ .NET Core 3.0 SDK és újabb verziók
Memóriaképek gyűjtése Linuxon
Tipp.
A memóriaképek gyűjtésére, elemzésére és egyéb kikötésekre vonatkozó gyakori kérdésekért tekintse meg a Memóriaképek: GYAKORI KÉRDÉSEK című témakört.
A linuxos memóriaképek gyűjtésének két ajánlott módja:
dotnet-dump
CLI-eszköz- Az összeomlások memóriaképeit gyűjtő környezeti változók
Memóriaképek elemzése Linuxon
A memóriaképek összegyűjtése után elemezhető az dotnet-dump
eszközzel a dotnet-dump analyze
paranccsal. Ezt az elemzési lépést olyan gépen kell futtatni, amely ugyanazzal az architektúrával és Linux-disztribúcióval rendelkezik, mint a környezet, amelyben a memóriaképet rögzítették.
Az dotnet-dump
eszköz támogatja a .NET-kódokkal kapcsolatos információk megjelenítését, de más nyelvek, például a C és a C++ kódhibáinak megértéséhez nem hasznos.
Alternatív megoldásként az LLDB használható a linuxos memóriaképek elemzésére, amely lehetővé teszi a felügyelt és a natív kód elemzését is. Az LLDB az SOS-bővítményt használja a felügyelt kód hibakereséséhez. A dotnet-sos
PARANCSSOR-eszköz az SOS telepítéséhez használható, amely számos hasznos parancsot kínál a felügyelt kód hibakereséséhez. A .NET Core-memóriaképek elemzéséhez az LLDB és az SOS a következő .NET Core bináris fájlokat követeli meg a környezetből, amelyben a memóriaképet létrehozták:
- libmscordaccore.so
- libcoreclr.so
- dotnet (az alkalmazás elindításához használt gazdagép)
A legtöbb esetben ezek a bináris fájlok az eszközzel tölthetők le dotnet-symbol
. Ha a szükséges bináris fájlok nem tölthetők le dotnet-symbol
(például ha a forrásból készült .NET Core privát verziója volt használatban), szükség lehet a fent felsorolt fájlok másolására abból a környezetből, amelyben a memóriakép létre lett hozva. Ha a fájlok nem a memóriaképfájl mellett találhatók, az LLDB/SOS paranccsal setclrpath <path>
beállíthatja a betöltendő elérési utat, és setsymbolserver -directory <path>
beállíthatja a szimbólumfájlok keresésének elérési útját.
Miután a szükséges fájlok elérhetővé válnak, a memóriakép betölthető az LLDB-be úgy, hogy a dotnet-gazdagépet adja meg végrehajthatóként a hibakereséshez:
lldb --core <dump-file> <host-program>
Az előző parancs az elemezni kívánt memóriakép elérési útja, <dump-file>
és <host-program>
a .NET Core-alkalmazást kezdő natív program. Ez általában a dotnet
bináris, kivéve, ha az alkalmazás önálló, ebben az esetben az alkalmazás neve a .dll bővítmény nélkül.
Az LLDB elindítása után előfordulhat, hogy a setsymbolserver
parancs használatával a megfelelő szimbólumhelyre kell mutatnia (setsymbolserver -ms
a Microsoft szimbólumkiszolgálójának használatához vagy setsymbolserver -directory <path>
egy helyi elérési út megadásához). Natív szimbólumok betöltéséhez futtassa a parancsot loadsymbols
. Ezen a ponton SOS-parancsokkal elemezheti a memóriaképet.
Feljegyzés
Az LLDB a paranccsal telepíthető sudo apt-get install lldb
Memóriaképek elemzése Windows rendszeren
A Linux-gépekről gyűjtött memóriaképek a Visual Studio, a Windbg vagy a dotnet-dump eszközzel is elemezhetők Windows rendszerű gépeken. A Visual Studio és a Windbg is képes natív és felügyelt kód elemzésére, míg a dotnet-dump csak a felügyelt kódot elemzi.
Feljegyzés
A Visual Studio 16.8-s és újabb verziói lehetővé teszik a .NET Core 3.1.7-es vagy újabb verziójában létrehozott Linux-memóriaképek megnyitását és elemzését.
- Visual Studio – Tekintse meg a Visual Studio hibakeresési útmutatót.
- Windbg – A windowsos felhasználói módú memóriaképek hibakereséséhez használt utasításokat követve hibakeresést végezhet a windowsos memóriaképeken. Linux x64 vagy Arm64 környezetből gyűjtött memóriaképekhez használja a windbg x64-verzióját, valamint a Linux x86-környezetből gyűjtött memóriaképek x86-os verzióját.
- dotnet-dump – A memóriakép megtekintése a dotnet-dump analyze paranccsal. Linux x64- vagy Arm64-környezetből gyűjtött memóriaképekhez használja a dotnet-dump x64-verzióját, valamint a Linux x86-környezetből gyűjtött memóriaképek x86-os verzióját.
Lásd még
- dotnet-sos az SOS-bővítmény telepítésével kapcsolatos további részletekért.
- dotnet-symbol a szimbólumletöltő eszköz telepítésével és használatával kapcsolatos további részletekért.
- A .NET Core diagnosztikai adattára további részleteket tartalmaz a hibakeresésről, beleértve a hasznos gyakori kérdéseket is.
- Az LLDB telepítése az LLDB Linuxon vagy Macen való telepítésével kapcsolatos utasításokért.
- Linuxon végzett gyakorlati és hibaelhárítási oktatóanyag az összeomlási memóriaképek hibakereséséről Linuxon