Sprawdzanie poprzednich stanów aplikacji przy użyciu funkcji IntelliTrace z powrotem w programie Visual Studio (Visual Studio Enterprise)

Funkcja IntelliTrace krok wstecz automatycznie tworzy migawkę aplikacji w każdym punkcie przerwania i zdarzeniu kroku debugera. Zarejestrowane migawki umożliwiają powrót do poprzednich punktów przerwania lub kroków i wyświetlanie stanu aplikacji w przeszłości. Funkcja IntelliTrace krok do tyłu pozwala zaoszczędzić czas, gdy chcesz zobaczyć poprzedni stan aplikacji, ale nie chcesz ponownie debugować ani ponownie tworzyć żądanego stanu aplikacji.

Funkcja IntelliTrace jest dostępna od wersji 15.5 lub nowszej w programie Visual Studio Enterprise 2017 i nowszym. Wymaga to aktualizacji rocznicowej lub nowszej systemu Windows 11 lub Windows 10. Ta funkcja jest obecnie obsługiwana do debugowania ASP.NET, WinForms, WPF, zarządzanych aplikacji konsolowych i bibliotek klas zarządzanych. Począwszy od programu Visual Studio 2017 Enterprise w wersji 15.7, ta funkcja jest również obsługiwana w przypadku platformy ASP.NET Core i .NET Core. Począwszy od programu Visual Studio 2017 Enterprise w wersji 15.9 (wersja zapoznawcza 2), ta funkcja jest również obsługiwana w przypadku aplikacji natywnych przeznaczonych dla systemu Windows. Debugowanie aplikacji platformy UWP nie jest obecnie obsługiwane.

Ten samouczek obejmuje następujące kroki:

  • Włączanie zdarzeń i migawek intelliTrace
  • Nawigowanie po zdarzeniach przy użyciu poleceń krok do tyłu i krok do przodu
  • Wyświetlanie migawek zdarzeń

Włączanie trybu zdarzeń i migawek IntelliTrace

  1. Otwórz projekt w programie Visual Studio Enterprise.

  2. Otwórz opcje narzędzia>Ustawienia>IntelliTrace i wybierz opcję Zdarzenia i migawki IntelliTrace.

    Począwszy od programu Visual Studio 2017 Enterprise w wersji 15.9 (wersja zapoznawcza 2), ta opcja to migawki IntelliTrace (zarządzane i natywne).

    Enable IntelliTrace Events and Snapshots mode

  3. Jeśli chcesz skonfigurować opcje wyświetlania migawek dla wyjątków, wybierz pozycję IntelliTrace>Advanced w oknie dialogowym Opcje.

    Te opcje są dostępne od wersji 15.7 programu Visual Studio 2017 Enterprise.

    Configure behavior for snapshots on exceptions

    Po włączeniu zdarzeń i migawek tworzenie migawek dla wyjątków jest również domyślnie włączone. Migawki wyjątków można wyłączyć, usuwając zaznaczenie opcji Zbieraj migawki zdarzeń wyjątków. Po włączeniu tej funkcji migawki są tworzone dla nieobsługiwane wyjątki. W przypadku obsługiwanych wyjątków migawki są wykonywane tylko wtedy, gdy wyjątek jest zgłaszany, a jeśli nie jest to ponowne przejście wcześniej zgłoszonego wyjątku. Maksymalną liczbę migawek dla wyjątków można ustawić, wybierając wartość z listy rozwijanej. Maksymalna wartość ma zastosowanie za każdym razem, gdy aplikacja wchodzi w tryb przerwania (na przykład gdy aplikacja osiągnie punkt przerwania).

    Uwaga

    Migawki są wykonywane tylko w przypadku zdarzeń wyjątków, które rejestruje intelliTrace. W przypadku kodu zarządzanego można określić, jakie zdarzenia rekordy IntelliTrace są rejestrowane, wybierając pozycję Narzędzia>Opcje zdarzeń> IntelliTrace.

  4. W projekcie ustaw co najmniej jeden punkt przerwania i rozpocznij debugowanie (naciśnij klawisz F5) lub rozpocznij debugowanie, przechodząc przez kod (F10 lub F11).

    Funkcja IntelliTrace tworzy migawkę procesu aplikacji w każdym kroku debugera, zdarzenia punktu przerwania i nieobsługiwanego zdarzenia wyjątku. Te zdarzenia są rejestrowane na karcie Zdarzenia w oknie Narzędzia diagnostyczne wraz z innymi zdarzeniami IntelliTrace. Aby otworzyć to okno, wybierz pozycję Debuguj>narzędzia diagnostyczne Pokaż system Windows.>

    Ikona aparatu jest wyświetlana obok zdarzeń, dla których są dostępne migawki.

    Events tab with snapshots

    Ze względu na wydajność migawki nie są wykonywane po szybkim kroku. Jeśli obok kroku nie pojawi się żadna ikona aparatu, spróbuj wykonać krok wolniej.

  1. Nawiguj między zdarzeniami przy użyciu przycisków Krok do tyłu (Alt + [) i Krok do przodu (Alt + ]) na pasku narzędzi Debugowanie.

    Te przyciski umożliwiają nawigowanie po zdarzeniach wyświetlanych na karcie Zdarzenia w oknie Narzędzia diagnostyczne. Przechodzenie wstecz lub do przodu do zdarzenia automatycznie aktywuje debugowanie historyczne w wybranym zdarzeniu.

    Step Backward and Forward buttons

    Po powrocie lub kroku naprzód program Visual Studio przechodzi w tryb debugowania historycznego. W tym trybie kontekst debugera przełącza się na godzinę zarejestrowania wybranego zdarzenia. Program Visual Studio przenosi również wskaźnik do odpowiedniego wiersza kodu w oknie źródłowym.

    W tym widoku można sprawdzić wartości w oknach Stos wywołań, Ustawienia lokalne, Autos i Watch. Możesz również umieścić kursor na zmiennych, aby wyświetlić dane Wskazówki i przeprowadzić ocenę wyrażeń w oknie Natychmiastowy. Widoczne dane pochodzą z migawki procesu aplikacji wykonanego w tym momencie.

    Na przykład jeśli punkt przerwania został trafiony i wykonano krok (F10), przycisk Krok do tyłu umieszcza program Visual Studio w trybie historycznym w wierszu kodu odpowiadającego punktowi przerwania.

    Activating historical mode on an event with a snapshot

  2. Aby powrócić do wykonywania na żywo, wybierz pozycję Kontynuuj (F5) lub wybierz link Powrót do debugowania na żywo na pasku informacyjnym.

  3. Możesz również wyświetlić migawkę na karcie Zdarzenia . Wybierz zdarzenie z migawką i wybierz pozycję Aktywuj debugowanie historyczne.

    Activate Historical Debugging on an event

    W przeciwieństwie do polecenia Ustaw następną instrukcję wyświetlanie migawki nie powoduje ponownego uruchomienia kodu. Zapewnia on statyczny widok stanu aplikacji w czasie, który wystąpił w przeszłości.

    Overview of IntelliTrace step-back

    Aby dowiedzieć się więcej na temat sprawdzania zmiennych w programie Visual Studio, zobacz Pierwsze spojrzenie na debuger

Często zadawane pytania

W jaki sposób funkcja IntelliTrace różni się od trybu tylko zdarzeń IntelliTrace?

Funkcja IntelliTrace w trybie tylko zdarzeń umożliwia aktywowanie debugowania historycznego w krokach debugera i punktach przerwania. Jednak funkcja IntelliTrace przechwytuje dane tylko w oknach Ustawienia lokalne i Automatyczne , jeśli okna są otwarte, i przechwytuje tylko dane, które są rozwinięte i wyświetlane. W trybie tylko zdarzeń często nie masz pełnego widoku zmiennych i obiektów złożonych. Ponadto ocena wyrażeń i wyświetlanie danych w oknie Watch nie są obsługiwane.

W trybie zdarzeń i migawek funkcja IntelliTrace przechwytuje całą migawkę procesu aplikacji, w tym złożone obiekty. W wierszu kodu można zobaczyć te same informacje, co w przypadku zatrzymania w punkcie przerwania (i nie ma znaczenia, czy wcześniej rozszerzono informacje). Ocena wyrażeń jest również obsługiwana podczas wyświetlania migawki.  

Jaki jest wpływ na wydajność tej funkcji? 

Wpływ na ogólną wydajność kroku zależy od aplikacji. Obciążenie związane z tworzeniem migawki wynosi około 30 ms. Po utworzeniu migawki proces aplikacji jest rozwidlony, a kopia rozwidlenia jest zawieszona. Podczas wyświetlania migawki program Visual Studio jest dołączany do rozwidlenia kopii procesu. Dla każdej migawki program Visual Studio kopiuje tylko tabelę stron i ustawia strony w celu kopiowania na zapis. Jeśli obiekty na stercie zmieniają się między krokami debugera skojarzonymi migawkami, odpowiednia tabela stron zostanie skopiowana, co spowoduje minimalny koszt pamięci. Jeśli program Visual Studio wykryje, że nie ma wystarczającej ilości pamięci do utworzenia migawki, nie zostanie ona pobrana.

Znane problemy

  • Jeśli używasz trybu zdarzeń i migawek IntelliTrace w wersjach systemu Windows starszych niż Windows 10 Fall Creators Update (RS3), a jeśli docelowy element docelowy platformy debugowania aplikacji jest ustawiony na x86, funkcja IntelliTrace nie wykonuje migawek.

    Obejścia:

    • Jeśli korzystasz z rocznicowej aktualizacji systemu Windows 10 (RS1), a twoja wersja jest starsza niż 10.0.14393.2273, zainstaluj KB4103720.
    • Jeśli korzystasz z Aktualizacja systemu Windows 10 dla twórców (RS2), a twoja wersja jest starsza niż 10.0.15063.1112, zainstaluj KB4103722.
    • Zainstaluj lub uaktualnij system Windows 11 lub Windows 10 Fall Creators Update (RS3).
    • Alternatywnie:
      1. Zainstaluj zestaw narzędzi VC++ 2015.3 v140 dla składnika komputera stacjonarnego (x86, x64) przy użyciu Instalatora programu Visual Studio.

      2. Skompiluj aplikację docelową.

      3. W wierszu polecenia użyj editbin narzędzia, aby ustawić flagę Largeaddressaware docelowego pliku wykonywalnego. Na przykład można użyć tego polecenia (po zaktualizowaniu ścieżki): "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. Aby rozpocząć debugowanie, naciśnij klawisz F5. Teraz migawki są wykonywane w krokach debugera i punktach przerwania.

        Uwaga

        Flaga Largeaddressaware musi być ustawiana za każdym razem, gdy plik wykonywalny zostanie ponownie skompilowany ze zmianami.

  • Gdy migawka procesu aplikacji jest wykonywana w aplikacji korzystającej z utrwalonego pliku mapowanego na pamięć, proces z migawką przechowuje wyłączną blokadę w pliku mapowanym na pamięć (nawet po zwolnieniu blokady przez proces nadrzędny). Inne procesy są nadal w stanie odczytać, ale nie zapisywać w pliku mapowanym na pamięć.

    Obejście:

    • Wyczyść wszystkie migawki, kończąc sesję debugowania.
  • Podczas debugowania aplikacji, której proces ma dużą liczbę unikatowych regionów pamięci, takich jak aplikacja, która ładuje dużą liczbę bibliotek DLL, może mieć wpływ na wydajność krok po włączeniu migawek. Ten problem zostanie rozwiązany w przyszłej wersji systemu Windows. Jeśli występuje ten problem, skontaktuj się z nami pod adresem stepback@microsoft.com.

  • Podczas zapisywania pliku za pomocą funkcji Debugowanie > sesji IntelliTrace Zapisz intelliTrace > w trybie zdarzeń i migawek inne dane przechwycone z migawek nie są dostępne w pliku itrace. W przypadku zdarzeń punktu przerwania i kroku zobaczysz te same informacje, jak w przypadku zapisania pliku w trybie tylko zdarzeń IntelliTrace.

Następne kroki

W tym samouczku pokazano, jak używać funkcji IntelliTrace krok po kroku. Możesz dowiedzieć się więcej na temat innych funkcji IntelliTrace.