Sdílet prostřednictvím


Diagnostika a instrumentace

Nativní AOT sdílí některé, ale ne všechny funkce diagnostiky a instrumentace pomocí CoreCLR. Vzhledem k bohatému výběru diagnostických nástrojů coreCLR je někdy vhodné diagnostikovat a ladit problémy v CoreCLR. 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. 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í.

Podpora diagnostiky .NET 8 Native 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 CoreCLR. EventPipe je volitelná komponenta nativní AOT. Pokud chcete zahrnout podporu EventPipe, nastavte EventSourceSupport vlastnost MSBuild na truehodnotu .

<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á CoreCLR. 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 pomocí dotnet runnástroje , dotnet buildnebo dotnet test, ve výchozím nastavení se spustí v CoreCLR. Pokud PublishAot je však v souboru projektu, chování by mělo být stejné mezi CoreCLR 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.