Diagnosztikák és rendszerállapotok
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:
Szolgáltatás | 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 futtatókörnyezeti 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 dotnet run
dotnet build
dotnet test
a teljes .NET-futtatókörnyezetben fut alapértelmezés szerint. 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 a verem nyomkövetésének és változóinak vizsgálatát, a forrásvonalakba való lépést vagy a sortörési pontok beállítását.
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 a rendszer tárolja vagy rcx
x0
regisztrálja. Ha a hibakereső támogatja a C++ objektumok megtekintését, a regisztrációt a kivétellel kapcsolatos további információk megtekintéséhez S_P_CoreLib_System_Exception*
állíthatja be.
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íthat egy natív AOT-fordítású végrehajtható fájlt a Visual Studio hibakeresőjében a Visual Studio IDE-ben való megnyitásával. 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 Windows 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 a Hibakeresés vagy az F5 hibakeresése>), nyissa meg a Watch ablakot (Hibakeresés a Windows > Watchban>), és adja hozzá a következő kifejezést az órák egyikéhez: (S_P_CoreLib_System_Exception*)@rcx
Ez a mechanizmus azt a tényt használja fel, hogy az x64 cpu-regisztráló RCX meghívja RhThrowEx
a kidobott kivételt. A kifejezést beillesztheti az Azonnali ablakba 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ó végrehajtható és szimbólumfá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
A natív AOT jelenleg nem támogatja a felügyelt halomelemzőt. 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.