Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nativní AOT sdílí některé, ale ne všechny možnosti diagnostiky a instrumentace s celým .NET runtime. Aplikace, které jsou kompatibilní s trim funkcí, by neměly mít rozdíly v chování, takže analýzy se často vztahují na oba runtime prostředí. Proto je někdy vhodné diagnostikovat a ladit problémy v plném modulu runtime .NET, protože má bohatý výběr dostupných diagnostických nástrojů. Některé informace je však možné shromáždit pouze po publikování, takže nativní AOT také poskytuje diagnostické nástroje po publikování.
Nativní podpora diagnostiky AOT
Následující tabulka shrnuje diagnostické funkce podporované pro nativní nasazení AOT:
| Funkce | Plně podporovaná | Částečně podporováno | Nepodporováno |
|---|---|---|---|
| Pozorovatelnost a telemetrie | Částečně podporovaná | ||
| Diagnostika v době vývoje | Plně podporovaná | ||
| Nativní ladění | Částečně podporovaná | ||
| Profilace procesoru | Částečně podporovaná | ||
| Analýza haldy | Nepodporováno |
Pozorovatelnost a telemetrie
Od verze .NET 8 nativní modul runtime AOT podporuje eventPipe, což je základní vrstva používaná mnoha knihovnami protokolování a trasování. S EventPipe můžete pracovat přímo prostřednictvím rozhraní API, jako jsou EventSource.WriteEvent například OpenTelemetry, nebo můžete používat knihovny založené na nich. Podpora eventPipe umožňuje také diagnostické nástroje .NET, jako jsou dotnet-trace, dotnet-counters a dotnet-monitor , bezproblémově pracovat s nativními aplikacemi AOT nebo úplnými aplikacemi modulu runtime .NET. EventPipe je volitelná komponenta nativní AOT. Pokud chcete zahrnout podporu EventPipe, nastavte hodnotu vlastnosti MSBuild na EventSourceSupport.
<PropertyGroup>
<EventSourceSupport>true</EventSourceSupport>
</PropertyGroup>
Nativní AOT poskytuje částečnou podporu pro některé známé poskytovatele událostí. Nativní AOT nepodporuje všechny události modulu runtime.
Diagnostika v době vývoje
Nástroje .NET CLI (dotnet SDK) a Visual Studio nabízejí samostatné příkazy pro build a publish.
build (nebo Start v sadě Visual Studio) používá úplný modul runtime .NET. Pouze publish vytvoří nativní aplikaci AOT. Publikování vaší aplikace jako nativní AOT vytvoří aplikaci, která byla dopředu zkompilována do nativního kódu. Jak už bylo zmíněno dříve, ne všechny diagnostické nástroje bez problémů fungují s publikovanými nativními aplikacemi AOT v .NET 8. Všechny diagnostické nástroje .NET jsou ale dostupné vývojářům během fáze sestavování aplikací. Doporučujeme vyvíjet, ladit a testovat aplikace jako obvykle a publikovat funkční aplikaci pomocí nativní AOT jako jeden z posledních kroků.
Nativní ladění
Když aplikaci spustíte během vývoje, například v sadě Visual Studio, nebo s dotnet rundotnet build, nebo dotnet test, běží ve výchozím nastavení na úplném modulu runtime .NET. Pokud je však PublishAot v souboru projektu, chování by mělo být stejné mezi celým .NET runtime a Native AOT. Tato charakteristika umožňuje použít standardní modul ladění spravované sadou Visual Studio pro vývoj a testování.
Po publikování se aplikace Native AOT stávají skutečnými nativními binárními soubory. Spravovaný ladicí program na nich nebude fungovat. Nativní kompilátor AOT však generuje plně nativní spustitelné soubory, které nativní ladicí programy můžou ladit na zvolené platformě (například WinDbg nebo Visual Studio ve Windows a gdb nebo lldb v systémech podobných systému Unix).
Nativní kompilátor AOT generuje informace o číslech řádků, typech, místních a parametrech. Nativní ladicí program umožňuje zkontrolovat trasování zásobníku a proměnné, procházet zdrojovými řádky nebo nastavit zarážky na řádcích.
Chcete-li ladit spravované výjimky, nastavte zarážku na metodě RhThrowEx, která se volá při každém vyvolání spravované výjimky. Výjimka je uložena v prvním registru argumentů, který je rcx na platformě x64 a x0 arm64. Pokud ladicí program podporuje zobrazení objektů C++, můžete přetypovat registr na S_P_CoreLib_System_Exception*, abyste zobrazili další informace o výjimce.
Shromažďování souboru s výpisem pro nativní aplikaci AOT zahrnuje některé ruční kroky v .NET 8.
Poznámky specifické pro Visual Studio
V integrovaném vývojovém prostředí sady Visual Studio můžete spustit nativní spustitelný soubor zkompilovaný pomocí AOT tak, že ho otevřete v ladicím programu sady Visual Studio. Musíte otevřít samotný spustitelný soubor v sadě Visual Studio.
Chcete-li nastavit zarážku, která se přeruší při každém vyvolání výjimky, zvolte možnost Zarážky z nabídky Ladění > Windows. V novém okně vyberte Zarážku Nová funkce>. Zadejte RhThrowEx jako název funkce a ponechte možnost Jazyk ve všech jazycích (nevybírejte jazyk C#).
Pokud chcete zjistit, jaká výjimka byla vyvolána, spusťte ladění (Spustit > ladění nebo F5) a když RhThrowEx zarážka, otevřete okno Sledování (> Debug > Windows Watch) a přidejte následující výraz jako jedno z pozorování:
| Architektura | Výraz |
|---|---|
| Architektura x64 | (S_P_CoreLib_System_Exception*)@rcx |
| Architektura Arm64 | (S_P_CoreLib_System_Exception*)@x0 |
Tento mechanismus využívá skutečnost, že v době, kdy je voláno RhThrowEx, registr procesoru zmíněný v tabulce obsahuje vyvolanou výjimku. Výraz můžete také vložit do příkazového okna sady Visual Studio; syntaxe je stejná jako u hodinek.
Důležitost souboru symbolů
Při publikování vytvoří nativní kompilátor AOT spustitelný soubor i soubor symbolů. Nativní ladění a související aktivity, jako je profilace, vyžadují přístup k nativnímu souboru symbolů. Pokud tento soubor není k dispozici, může dojít ke snížení nebo přerušení výsledků.
Informace o názvu a umístění souboru symbolů naleznete v tématu Nativní ladicí informace.
Profilace procesoru
Nástroje specifické pro platformu, jako jsou PerfView a Perf , je možné použít ke shromažďování ukázek procesoru nativní aplikace AOT.
Analýza haldy
Analýza spravované haldy není v současné době podporována v nativním AOT. Analytické nástroje haldy, jako jsou dotnet-gcdump, PerfView a analytické nástroje haldy sady Visual Studio, nefungují v nativní AOT v .NET 8.