Megosztás:


Diagnosztika és műszerezés

A natív AOT a teljes .NET-futtatókörnyezettel osztja meg a diagnosztikai és a rendszerállapot-képességek egy részét, de nem az összeset. A vágáskompatibilis alkalmazásoknak nem kell viselkedésbeli különbségekkel rendelkezniük, ezért a vizsgálatok gyakran mindkét futtatókörnyezetre érvényesek. Ezért néha célszerű diagnosztizálni és hibakeresést végezni a teljes .NET-futtatókörnyezetben, mivel számos elérhető diagnosztikai segédprogramot tartalmaz. Ennek ellenére bizonyos információk csak a közzététel után gyűjthetők össze, így a Natív AOT a közzététel utáni diagnosztikai eszközöket is biztosítja.

Natív AOT diagnosztikai támogatás

Az alábbi táblázat a natív AOT-környezetekhez támogatott diagnosztikai funkciókat foglalja össze:

Jellemző Teljes mértékben támogatott Részben támogatott Nem támogatott
Megfigyelhetőség és telemetria Részben támogatott
Fejlesztési idő diagnosztikái Teljes mértékben támogatott
Natív hibakeresés Részben támogatott
CPU-profilkészítés Részben támogatott
Halomelemzés Nem támogatott

Megfigyelhetőség és telemetria

A .NET 8-as verziójától a natív AOT-futtatókörnyezet támogatja az EventPipe-t, amely a számos naplózási és nyomkövetési kódtár által használt alapréteg. Az EventPipe-hez közvetlenül api-kon EventSource.WriteEvent keresztül is csatlakozhat, vagy használhatja a felülre épülő kódtárakat, például az OpenTelemetryt. Az EventPipe-támogatás lehetővé teszi a .NET diagnosztikai eszközök, például a dotnet-trace, a dotnet-counters és a dotnet-monitor használatát is, hogy zökkenőmentesen működjenek natív AOT- vagy teljes .NET-futtatókörnyezeti alkalmazásokkal. Az EventPipe a natív AOT opcionális összetevője. Az EventPipe támogatásának hozzáadásához állítsa az EventSourceSupport MSBuild tulajdonságot a következőre true: .

<PropertyGroup>
    <EventSourceSupport>true</EventSourceSupport>
</PropertyGroup>

A natív AOT részleges támogatást nyújt néhány jól ismert eseményszolgáltató számára. A Natív AOT nem minden futásidejű eseményt támogat.

Fejlesztési idő diagnosztikái

A .NET CLI eszközkészlet (dotnet SDK) és a Visual Studio külön parancsokat kínál a következőhöz build : és publish. build (vagy Start a Visual Studióban) a teljes .NET-futtatókörnyezetet használja. Csak publish natív AOT-alkalmazást hoz létre. Ha natív AOT-ként teszi közzé az alkalmazást, egy előre elkészített (AOT) alkalmazást hoz létre natív kódra. Ahogy korábban említettük, nem minden diagnosztikai eszköz működik zökkenőmentesen a .NET 8-ban közzétett natív AOT-alkalmazásokkal. Az alkalmazáskészítési szakaszban azonban minden .NET diagnosztikai eszköz elérhető a fejlesztők számára. Javasoljuk, hogy a szokásos módon fejlesszük, hibakereséssel és teszteléssel teszteljük az alkalmazásokat, és az utolsó lépések egyikeként közzétegyük a munkaalkalmazást natív AOT használatával.

Natív hibakeresés

Amikor fejlesztés közben futtatja az alkalmazást, például a Visual Studióban, vagy a dotnet run, dotnet build, vagy dotnet test használatával, alapértelmezés szerint a teljes .NET futtatókörnyezeten fut. Ha PublishAot azonban jelen van a projektfájlban, a viselkedésnek azonosnak kell lennie a teljes .NET-futtatókörnyezet és a natív AOT között. Ez a jellemző lehetővé teszi a Standard Visual Studio által felügyelt hibakeresési motor használatát a fejlesztéshez és teszteléshez.

A közzététel után a natív AOT-alkalmazások valódi natív bináris fájlok. A felügyelt hibakereső nem működik rajtuk. A natív AOT-fordító azonban teljesen natív végrehajtható fájlokat hoz létre, amelyeket a natív hibakeresők a választott platformon (például Windowson a WinDbg vagy a Visual Studio, unix-szerű rendszereken pedig gdb vagy lldb) képesek hibakeresésre.

A natív AOT-fordító adatokat hoz létre a sorok számáról, típusairól, helyi adatairól és paramétereiről. A natív hibakereső lehetővé teszi, hogy megvizsgálja a veremnyomot és a változókat, lépjen be vagy lépjen túl a kódsorokon, illetve beállítson vonaltörési pontokat.

A felügyelt kivételek hibakereséséhez állítson be egy töréspontot a RhThrowEx metóduson, amelyet a rendszer akkor hív meg, amikor egy felügyelt kivételt dobnak ki. A kivételt az első argumentumregiszter tárolja, amely rcx x64-en és x0 Arm64-en található. Ha a hibakereső támogatja a C++ objektumok megtekintését, átalakíthatja a regisztert S_P_CoreLib_System_Exception*-ra, hogy további információkat lásson a kivételről.

A natív AOT-alkalmazások memóriaképfájljának összegyűjtése a .NET 8 néhány manuális lépését foglalja magában.

Visual Studio-specifikus jegyzetek

Elindíthatja a Visual Studio hibakeresőjében a natív AOT-fordítású végrehajtható fájlt azzal, hogy megnyitja a Visual Studio IDE-ben. A végrehajtható fájlt meg kell nyitnia a Visual Studióban.

Ha olyan töréspontot szeretne beállítani, amely kivétel esetén megszakad, válassza a Töréspontok lehetőséget a > hibakeresési menüjében. Az új ablakban válassza az Új > függvény töréspontot. Adja meg RhThrowEx a függvény neveként, és hagyja meg a Nyelv beállítást a Minden nyelvnél (ne válassza a C#lehetőséget).

Ha meg szeretné tekinteni, hogy milyen kivétel történt, indítsa el a hibakeresést (Hibakeresés > Indítása vagy F5), és amikor elérjük a RhThrowEx töréspontot, nyissa meg a Figyelő ablakot (Hibakeresés > Ablakok > Figyelő), és adja hozzá a következő kifejezést az egyik figyelőként:

Építészet Kifejezés
x64-architektúra (S_P_CoreLib_System_Exception*)@rcx
Arm64-architektúra (S_P_CoreLib_System_Exception*)@x0

Ez a mechanizmus azt a tényt használja fel, hogy amikor a RhThrowEx meghívásra kerül, a táblázatban említett CPU-regiszter tartalmazza a kidobott kivételt. A kifejezést beillesztheti a Visual Studio Azonnali ablakába is; a szintaxis megegyezik az órák szintaxisával.

A szimbólumfájl fontossága

Közzétételkor a natív AOT fordítóval egy végrehajtható fájlt és egy szimbólum fájlt is létrehoz. A natív hibakereséshez és a kapcsolódó tevékenységekhez, például a profilkészítéshez hozzáférésre van szükség a natív szimbólumfájlhoz. Ha ez a fájl nem jelenik meg, előfordulhat, hogy csökkentett vagy hibás eredményeket adott meg.

A szimbólumfájl nevével és helyével kapcsolatos információkért lásd a natív hibakeresési információkat.

CPU-profilkészítés

A platformspecifikus eszközök, például a PerfView és a Perf felhasználhatók a natív AOT-alkalmazások CPU-mintáinak gyűjtésére.

Halomelemzés

Jelenleg a natív AOT nem támogatja a felügyelt halomelemzést. A halomelemző eszközök, például a dotnet-gcdump, a PerfView és a Visual Studio halomelemző eszközei nem működnek natív AOT-ban a .NET 8-ban.

Lásd még