Megosztás:


Linux dumpfájlok hibakeresése

Ez a cikk a következőre vonatkozik: ✔️ .NET Core 3.0 SDK és újabb verziók

Adatmentések gyűjtése Linuxon

Jótanács

A memóriaképek gyűjtésére, elemzésére és további megjegyzé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:

Linux hibaképek elemzése

A memóriaképek összegyűjtése után elemezhetjük 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 CLI-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 indítására használt host program)

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árisok 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épet létrehozták. Ha a fájlok nem a memóriaképfájl mellett találhatók, az LLDB/SOS paranccsal setclrpath <path> beállíthatja azt az elérési utat, ahonnan a fájlokat be kell tölteni, és setsymbolserver -directory <path> beállíthatja azt az elérési utat, hogy hol keresse a szimbólum fájlokat.

Miután a szükséges fájlok elérhetővé válnak, a "dump" betölthető az LLDB-be úgy, hogy a dotnet hosztot adja meg végrehajtható programként a hibakereséshez.

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

Az előző parancsban a <dump-file> az elemzendő kivonat elérési útja, míg a <host-program> az a natív program, amely elindította a .NET Core-alkalmazást. 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. Most már használhatja az SOS-parancsokat a dömping elemzéséhez.

Megjegyzés:

Az LLDB a paranccsal telepíthető sudo apt-get install lldb

Memóriaképek elemzése Windows rendszeren

A Linux-gépről gyűjtött memóriaképek elemzése Windows operációs rendszerrel futó gépen is lehetséges, a Visual Studio, Windbg vagy a dotnet-dump eszközök használatával. 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.

Megjegyzé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 Windbg segítségével hibakeresést végezhet Linuxos memóriaképeken, azokon a ugyanazon utasításokat követve, amelyeket a Windowsos felhasználói módú memóriaképek hibakereséséhez használna. 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éséhez a dotnet-dump analyze parancsot használja. 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