Diagnostika a instrumentace
Nativní AOT sdílí některé, ale ne všechny možnosti diagnostiky a instrumentace s úplným modulem runtime .NET. Aplikace, které jsou kompatibilní s oříznutím, by neměly mít rozdíly v chování, takže šetření se často vztahují na oba moduly runtime. 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 EventSourceSupport
vlastnost MSBuild na true
hodnotu .
<PropertyGroup>
<EventSourceSupport>true</EventSourceSupport>
</PropertyGroup>
Nativní AOT poskytuje částečnou podporu některých známých poskytovatelů 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. Vytvoří pouze publish
nativní aplikaci AOT. Publikování aplikace jako nativní AOT vytvoří aplikaci, která byla předem 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 run
dotnet build
, nebo dotnet test
, běží ve výchozím nastavení na úplném modulu runtime .NET. Pokud PublishAot
je však v souboru projektu, chování by mělo být stejné mezi úplným modulem runtime .NET a nativní AOT. Tato charakteristika umožňuje použít standardní modul ladění spravované sadou Visual Studio pro vývoj a testování.
Po publikování jsou nativní binární soubory nativních aplikací AOT. 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é, krokovat do zdrojových řádků nebo nastavit zarážky řádků.
Chcete-li ladit spravované výjimky, nastavte zarážku metody RhThrowEx
, která se volá při každém vyvolání spravované výjimky. Výjimka je uložena rcx
v registru nebo x0
v registru. Pokud ladicí program podporuje zobrazení objektů C++, můžete přetypovat registraci, abyste S_P_CoreLib_System_Exception*
zobrazili další informace o výjimce.
Shromažďování souboru s výpisem paměti pro nativní aplikaci AOT zahrnuje některé ruční kroky v .NET 8.
Poznámky specifické pro Visual Studio
V ladicím programu sady Visual Studio můžete spustit nativní spustitelný soubor kompilovaný AOT tak, že ho otevřete v integrovaném vývojovém prostředí sady Visual Studio. V sadě Visual Studio musíte otevřít samotný spustitelný soubor.
Chcete-li nastavit zarážku, která se přeruší při každém vyvolání výjimky, zvolte v nabídce Ladění > systému Windows možnost Zarážky. 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án, spusťte ladění (Ladění spuštění ladění nebo F5), otevřete okno Kukátko (Ladění > > Windows Watch) a přidejte následující výraz jako jeden z hodinek: (S_P_CoreLib_System_Exception*)@rcx
.> Tento mechanismus využívá skutečnost, že v době RhThrowEx
je volána, x64 CPU register RCX obsahuje vyvolánou výjimku. Výraz můžete také vložit do příkazového okna; 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
Spravovaná analýza haldy se v současné době nepodporuje v nativní 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.