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:

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:

  1. libmscordaccore.so
  2. libcoreclr.so
  3. 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