Ladění životního cyklu UWP aplikací

Visual Studio WinUI XAML

5 years ago

UWP aplikace lze spustit mnoha různými způsoby - dlaždicí, triggery, funkcí prelaunch a dalšími. Musíme se tedy ujistit že všechny tyto cesty fungují správně a v tom nám pomůže Visual Studio.

Spuštění s laděním

Základní způsob spuštení aplikace s laděním je přes menu Debug - Start Debugging... (F5). Aplikace projde standardním životním cyklem (metodou OnLaunched ve třídě Application).

Události životního cyklu & úlohy na pozadí

Pro ladění událostí životního cyklu běžící aplikace a spuštění zaregistrovaných úloh na pozadí, můžeme použít toolbar Debug location. Ten není ve výchozím rozložení Visual Studia zobrazen, ale napravit to můžeme hned několika způsoby. Můžeme použít menu View - Toolbars - Debug Location nebo použít zkratku kliknutím pravým tlačítkem myši na volný prostor v oblasti toolbarů v horní části Visual Studia:

Enabling debug toolbar via menu

Povolení nástroje Debug Location v menu

Mým oblíbeným způsobem pro zobrazení tohoto nástroje je však funkce Quick Launch (Ctrl + Q), kterou najdeme v pravém horním rohu okna Visual Studia. Zda zadáme jen "debug" a potvrdíme Enterem. Volba Debug Location se nám zobrazí v seznamu výsledků. Pokud navíc napíšeme celý text "debug location" a potvrdíme, volba se přímo přepne.

Finding Debug Location using Quick Launch

Hledání nástroje Debug Location přes Quick Launch

Debug Toolbar je velmi zajímavý i aplikace jiné než UWP, ale nás zajímá nejvíce Lifecycle Events (události životního cyklu) menu:

Lifecycle events menu

Menu událostí životního cyklu aplikace

Toto menu nám umožní spustit události Suspend, Resume, a Suspend and shutdown. Je třeba pamatovat na to, že po spuštění Suspend okno aplikace "zamrzne" a zůstane tak, dokud neklikneme na Resume. Pokud jste zaregistrovali nějaké úlohy na pozadí, najdete je v drop-downu na výběr pro ladění také.

Ladit po spuštění

Obzvláště zajímavou možností kterou Visual Studio nabízí, je spustit debugger a automaticky jej připojit ve chvíli, kdy bude aplikace spuštěna. Klikneme pravým tlačítkem myši na náš UWP projekt v Solution Exploreru, vybereme Properties a přepneme na záložku Debug. Zde ve skupině nastavení s titulkem Start action najdeme checkbox Do not launch, but debug my code when it starts.

Debug when app starts

Ladění po spuštění aplikace

Po povolení této možnosti a spuštění ladění (F5) Visual Studio přejde do módu ladění, ale aplikace se nespustí. Nyní můžete aplikaci nastartovat jiným způsobem - například otevřením asociovaného souboru nebo URI protokolem. Debugger se na aplikaci automaticky připojí a můžeme pak nastavit breakpointy a procházet aktivačním kódem aplikace podle potřeby. Rozhodně doporučuji tuto volbu po použití znovu vynpout. Není těžké na ni zapomenout a následující týden se divit, proč vlastně aplikace vůbec nenabíhá :-) .

Připojit k procesu

Další skvělou funkcí kterou Visual Studio nabízí je připojení se k běžící instanci aplikace přes dialog Debug - Attach to Process....

Attach debugger to process

Dialog Attach to Process

Můžete si vybrat proces běžící na vašem zařízení (nemusí jít o UWP aplikaci) nebo dokonce na jiném zařízení pomocí Visual Studio Remote Debugger. Nejlepší na tom je, že připojením debuggeru se v aplikaci zobrazí panel pro ladění XAML a můžeme pak prohlížet běžící aplikaci pomocí oken XAML Live Visual Tree a Live Property Explorer - a to dokonce i pro aplikace které si stáhneme z Microsoft Store! V tomto příkladě používám aplikaci Windows Kalkulačka, ačkoliv ta je nyní stejně open source :-) .

Examining XAML live tree of Calculator

Examining XAML live tree of Calculator

Funkce Other debug targets

Nakonec bych chtěl ještě v krátkosti zmínit tři další způsoby ladění životního cyklu UWP aplikací které jsou k dispozici v menu Debug - Other Debug Targets:

Other Debug Targets menu

Menu Other Debug Targets

Shora dolů to jsou:

  • Debug Installed App Package - umožní nám připojit debugger k jakémukoliv balíčku UWP aplikace nainstalovanému na počítači. Dialog nabízí i pokročilé volby pro výběr typu kódu pro ladění, připojení debuggeru bez nastartování (podobně jako v sekci výše), ladění funkce prelaunch (viz. níže) a zastavení debuggeru na prvním příkazu.

    [caption id="attachment_1701" align="aligncenter" width="610"]Debugging installed app packageLadění nainstalovaného balíčku aplikace[/caption]

  • Trigger Windows Store App Prefetch - bohužel si nejsem jistý, jak Windows Store App Prefetch funguje. Zřejmě je zde již od Visual Studia 2013 a Windows 8.1 (včetně jména, které stále obsahuje starý název Windows Store). Nenašel jsem žádnou aktualizovanou dokumentaci a nejvíce informací jsem překvapivě našel ve článku na stránce Azure DevOps blog post z roku 2014. Pokud o funkci víte více, prosím vás, abyste se se mnou podělili v komentářích a článek rád aktualizuji.

  • Debug Universal Windows App Prelaunch - s touto volbou můžeme ladit speciální volitelnou funkci životního cyklu aplikace prelaunch, pomocí které systém může aplikaci na pozadí načíst, aby ji uživatel pak mohl výrazně rychleji spustit. O spuštění prelaunch rozhoduje OS takže toto je jediný způsob, jak ji opravdu otestovat. Pro více informací se prosím podívejte na tento článek na Microsoft Docs, který popisuje prelaunch do detailů.

Shrnutí

Díky Visual Studiu máme k dispozici mnoho různých způsobů jak ladit naše UWP aplikace. Díky tomu se můžeme ujistit, že se aplikace vždy chová tak, jak jsme zamýšleli.