Megosztás a következőn keresztül:


Diagnosztikák és rendszerállapotok

A natív AOT a CoreCLR-sel osztja meg a diagnosztikai és rendszerezési képességek némelyikét, de nem az összeset. A CoreCLR diagnosztikai segédprogramok széles választéka miatt néha célszerű diagnosztizálni és hibakeresést végezni a CoreCLR-ben. 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. 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.

.NET 8 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 CoreCLR-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 CoreCLR-t 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

Ha fejlesztés közben futtatja az alkalmazást, például a Visual Studióban, vagy dotnet rundotnet builddotnet testalapértelmezés szerint a CoreCLR-en fut. Ha PublishAot azonban megtalálható a projektfájlban, a viselkedésnek azonosnak kell lennie a CoreCLR é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 rcxx0 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 vagyaz 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.