Kontrola předchozích stavů aplikace pomocí krokového kroku IntelliTrace v sadě Visual Studio (Visual Studio Enterprise)

IntelliTrace krok zpět automaticky pořídí snímek aplikace při každé události zarážky a kroku ladicího programu. Zaznamenané snímky umožňují vrátit se k předchozím zarážkách nebo krokům a zobrazit stav aplikace v minulosti. Krok zpět IntelliTrace vám může ušetřit čas, když chcete zobrazit předchozí stav aplikace, ale nechcete restartovat ladění nebo znovu vytvořit požadovaný stav aplikace.

IntelliTrace krok zpět je k dispozici od sady Visual Studio Enterprise 2017 verze 15.5 a novější a vyžaduje Windows 11 nebo Windows 10 Anniversary Update nebo starší. Tato funkce se v současné době podporuje pro ladění ASP.NET, WinForms, WPF, spravovaných konzolových aplikací a knihoven spravovaných tříd. Počínaje sadou Visual Studio 2017 Enterprise verze 15.7 se tato funkce podporuje také pro ASP.NET Core a .NET Core. Počínaje sadou Visual Studio 2017 Enterprise verze 15.9 Preview 2 je tato funkce podporovaná také pro nativní aplikace, které cílí na Windows. Ladění aplikací pro UPW se v současné době nepodporuje.

V tomto kurzu:

  • Povolení událostí a snímků IntelliTrace
  • Navigace mezi událostmi pomocí příkazů krok zpět a krok vpřed
  • Zobrazení snímků událostí

Povolení režimu událostí a snímků IntelliTrace

  1. Otevřete projekt v sadě Visual Studio Enterprise.

  2. Otevřete nastavení Nástroje Možnosti>>IntelliTrace a vyberte možnost Události a snímky IntelliTrace.

    Počínaje sadou Visual Studio 2017 Enterprise verze 15.9 Preview 2 je tato možnost snímky IntelliTrace (spravované a nativní).

    Enable IntelliTrace Events and Snapshots mode

  3. Pokud chcete nakonfigurovat možnosti pro zobrazení snímků u výjimek, v dialogovém okně Možnosti zvolte IntelliTrace>Upřesnit.

    Tyto možnosti jsou dostupné od sady Visual Studio 2017 Enterprise verze 15.7.

    Configure behavior for snapshots on exceptions

    Když povolíte události a snímky, pořizování snímků u výjimek je ve výchozím nastavení také povolené. Snímky u výjimek můžete zakázat zrušením výběru možnosti Shromáždit snímky u událostí výjimek. Pokud je tato funkce povolená, snímky se pořídí pro neošetřené výjimky. U zpracovaných výjimek se snímky pořídí jenom v případě, že je výjimka vyvolána a není-li to rethrow dříve vyvolané výjimky. Maximální počet snímků u výjimek můžete nastavit výběrem hodnoty z rozevíracího seznamu. Maximální hodnota platí pro každou dobu, kdy aplikace přejde do režimu přerušení (například když aplikace dosáhne zarážky).

    Poznámka:

    Snímky jsou pořízeny pouze pro události výjimky, které IntelliTrace zaznamenává. U spravovaného kódu můžete určit, které události IntelliTrace zaznamenává, výběrem možností>nástrojů>IntelliTrace události.

  4. V projektu nastavte jednu nebo více zarážek a spusťte ladění (stiskněte F5) nebo spusťte ladění krokováním kódu (F10 nebo F11).

    IntelliTrace pořídí snímek procesu aplikace v každém kroku ladicího programu, události zarážky a neošetřené události výjimky. Tyto události se zaznamenávají na kartě Události v okně Diagnostické nástroje spolu s dalšími událostmi IntelliTrace. Chcete-li toto okno otevřít, zvolte Ladit>nástroje>windows Zobrazit diagnostické nástroje.

    Vedle událostí, pro které jsou snímky k dispozici, se zobrazí ikona fotoaparátu.

    Events tab with snapshots

    Z důvodů výkonu se snímky při rychlém kroku nepoří. Pokud se vedle kroku nezobrazí žádná ikona fotoaparátu, zkuste krokovat pomaleji.

  1. Mezi událostmi můžete přecházet pomocí tlačítek Step Backward (Alt + [) a Step Forward (Alt + ]) na panelu nástrojů Ladění.

    Tato tlačítka procházejí události, které se zobrazí na kartě Události v okně Diagnostické nástroje. Krokování dozadu nebo dopředu na událost automaticky aktivuje historické ladění u vybrané události.

    Step Backward and Forward buttons

    Když přejdete zpět nebo přejdete dopředu, Visual Studio přejde do režimu historického ladění. V tomto režimu se kontext ladicího programu přepne na čas, kdy byla vybraná událost zaznamenána. Visual Studio také přesune ukazatel na odpovídající řádek kódu ve zdrojovém okně.

    V tomto zobrazení můžete zkontrolovat hodnoty v oknech zásobníku volání, místních hodnot, automatických hodnot a kukátkách. Můžete také najet myší na proměnné a zobrazit data Tipy a provést vyhodnocení výrazu v okně Okamžité. Zobrazená data pocházejí ze snímku procesu aplikace pořízeného v daném okamžiku.

    Pokud jste například narazili na zarážku a provedli krok (F10), tlačítko Krok zpět umístí Visual Studio do historického režimu na řádek kódu odpovídající zarážce.

    Activating historical mode on an event with a snapshot

  2. Pokud se chcete vrátit k živému spuštění, zvolte Pokračovat (F5) nebo vyberte odkaz Vrátit do živého ladění na informačním panelu.

  3. Snímek můžete zobrazit také na kartě Události . Vyberte událost se snímkem a vyberte Aktivovat historické ladění.

    Activate Historical Debugging on an event

    Na rozdíl od příkazu Set Next Statement se při prohlížení snímku znovu neskutečňuje váš kód. Poskytuje statické zobrazení stavu aplikace v okamžiku, kdy došlo v minulosti.

    Overview of IntelliTrace step-back

    Další informace o kontrole proměnných v sadě Visual Studio najdete v tématu První seznámení s ladicím programem.

Nejčastější dotazy

Jak se intelliTrace krok zpět liší od režimu pouze událostí IntelliTrace?

IntelliTrace v režimu pouze událostí umožňuje aktivovat historické ladění v krocích ladicího programu a zarážkách. IntelliTrace ale zachytává data pouze v oknech Locals a Autos , pokud jsou otevřená okna, a zachycuje pouze data, která jsou rozbalována a zobrazena. V režimu pouze událostí často nemáte úplné zobrazení proměnných a složitých objektů. Kromě toho se nepodporuje vyhodnocení výrazu a zobrazení dat v okně Kukátko .

V režimu událostí a snímků IntelliTrace zachytí celý snímek procesu aplikace, včetně složitých objektů. Na řádku kódu můžete zobrazit stejné informace, jako kdybyste byli zastaveni na zarážce (a nezáleží na tom, jestli jste informace dříve rozbalili). Vyhodnocení výrazu je také podporováno při prohlížení snímku.  

Jaký je dopad na výkon této funkce? 

Dopad na celkový výkon krokování závisí na vaší aplikaci. Režie při pořízení snímku je přibližně 30 ms. Po pořízení snímku se proces aplikace rozvětvuje a rozvětvovaná kopie se pozastaví. Když zobrazíte snímek, Visual Studio se připojí k rozvětvované kopii procesu. Pro každý snímek visual Studio zkopíruje pouze tabulku stránek a nastaví stránky na kopírování při zápisu. Pokud se objekty v haldě mění mezi kroky ladicího programu s přidruženými snímky, zkopíruje se příslušná tabulka stránek, což vede k minimálním nákladům na paměť. Pokud Visual Studio zjistí, že pro pořízení snímku není dostatek paměti, nic se nevyfotí.

Známé problémy

  • Pokud používáte režim událostí a snímků IntelliTrace ve verzích Windows starších než Windows 10 Fall Creators Update (RS3) a pokud je cíl ladicí platformy aplikace nastavený na x86, IntelliTrace nepořizuje snímky.

    Alternativní řešení:

    • Pokud používáte Windows 10 Anniversary Update (RS1) a vaše verze je starší než 10.0.14393.2273, nainstalujte KB4103720.
    • Pokud používáte Windows 10 Creators Update (RS2) a vaše verze je starší než 10.0.15063.1112, nainstalujte KB4103722.
    • Nainstalujte nebo upgradujte na Windows 11 nebo Windows 10 Fall Creators Update (RS3).
    • Alternativně:
      1. Nainstalujte z instalačního programu Visual studio sadu nástrojů VC++ 2015.3 v140 pro desktop (x86, x64).

      2. Sestavte cílovou aplikaci.

      3. Z příkazového řádku použijte editbin nástroj k nastavení Largeaddressaware příznaku cílového spustitelného souboru. Můžete například použít tento příkaz (po aktualizaci cesty): C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\VC\Tools\MSVC\14.12.25718\bin\Hostx86\x86\editbin.exe" /Largeaddressaware "C:\Path\To\Application\app.exe".

      4. Ladění spustíte stisknutím klávesy F5. Teď jsou snímky pořízeny u kroků a zarážek ladicího programu.

        Poznámka:

        Příznak Largeaddressaware musí být nastaven pokaždé, když se spustitelný soubor znovu sestaví se změnami.

  • Při pořízení snímku procesu aplikace v aplikaci, která používá trvalý soubor mapovaný do paměti, bude proces se snímkem obsahovat výhradní zámek na souboru mapované paměti (i když nadřazený proces uvolní jeho zámek). Ostatní procesy jsou stále schopny číst, ale ne zapisovat do souboru mapovaného paměti.

    Alternativní řešení:

    • Vymažte všechny snímky ukončením ladicí relace.
  • Při ladění aplikace, jejíž proces má velký počet jedinečných oblastí paměti, například aplikace, která načítá velký počet knihoven DLL, může mít vliv na krokování výkonu s povolenými snímky. Tento problém bude vyřešen v budoucí verzi Windows. Pokud k tomuto problému dochází, spojte se s námi na adrese stepback@microsoft.com.

  • Při ukládání souboru s funkcí Debug > IntelliTrace Save IntelliTrace > session under events and snapshots mode, ostatní data zachycená ze snímků nejsou k dispozici v souboru .itrace. U zarážek a událostí kroku se zobrazí stejné informace, jako kdybyste soubor uložili pouze v režimu událostí IntelliTrace.

Další kroky

V tomto kurzu jste se naučili používat IntelliTrace krok zpět. Možná budete chtít získat další informace o dalších funkcích IntelliTrace.