Debugowanie migawek wyjątków w aplikacjach .NET

Gdy wystąpi wyjątek, możesz automatycznie zebrać migawkę debugowania z aplikacji internetowej na żywo. Migawka pokazuje stan kodu źródłowego i zmiennych w momencie wygenerowania wyjątku. Aplikacja Snapshot Debugger usłudze Azure Application Szczegółowe informacje monitoruje dane telemetryczne wyjątków z aplikacji internetowej. Zbiera migawki na podstawie wyjątków zgłaszanych najpotrzebniej, aby uzyskać informacje potrzebne do diagnozowania problemów w środowisku produkcyjnym. Dołącz do aplikacji pakiet NuGet Snapshot Collector i opcjonalnie skonfiguruj parametry kolekcji w programieApplicationInsights.config. Migawki są wyświetlane w wyjątkach w witrynie Application Szczegółowe informacje Portal.

Migawki debugowania można wyświetlić w portalu, aby zobaczyć stos wywołań i sprawdzić zmienne w każdej ramce tego stosu. Aby uzyskać bardziej zaawansowane środowisko debugowania z kodem źródłowym, otwórz migawki z Visual Studio 2019 Enterprise. W Visual Studio można również ustawić punkty przyciągania tak, aby interaktywnie zróbły migawki bez oczekiwania na wyjątek.

Migawki debugowania są przechowywane przez 15 dni. Te zasady przechowywania są ustawiane dla każdych aplikacji. Jeśli chcesz zwiększyć tę wartość, możesz zażądać zwiększenia, otwierając zgłoszenie do pomocy technicznej w Azure Portal.

Włączanie Szczegółowe informacje Snapshot Debugger aplikacji

Kolekcja migawek jest dostępna dla:

  • .NET Framework i ASP.NET z systemem .NET Framework 4.5 lub nowszym.
  • Program .NET Core ASP.NET Core aplikacje z systemem .NET Core 2.1 (LTS) lub 3.1 (LTS) na Windows.
  • Aplikacje .NET 5.0 na Windows.

Nie zalecamy korzystania z programu .NET Core 2.0, 2.2 ani 3.0, ponieważ nie są one w stanie pomocy technicznej.

Obsługiwane są następujące środowiska:

Uwaga

Aplikacje klienckie (na przykład WPF, Windows Forms lub UWP) nie są obsługiwane.

Jeśli włączono obsługę Snapshot Debugger, ale nie widzisz migawek, zapoznaj się z naszym przewodnikiem rozwiązywania problemów.

Udzielenie uprawnień

Dostęp do migawek jest chroniony przez kontrolę dostępu na podstawie ról (RBAC) platformy Azure. Aby przeprowadzić inspekcję migawki, najpierw właściciel subskrypcji musi Cię dodać do niezbędnej roli.

Uwaga

Właściciele i współautorzy nie mają automatycznie tej roli. Jeśli użytkownik chce wyświetlić migawki, musi dodać siebie do roli.

Właściciele subskrypcji powinni przypisać rolę Application Insights Snapshot Debugger użytkownikom, którzy będą sprawdzać migawki. Tę rolę można przypisać do poszczególnych użytkowników lub grup przez właścicieli subskrypcji dla docelowego zasobu usługi Application Szczegółowe informacje lub jego grupy zasobów bądź subskrypcji.

  1. Przejdź do zasobu Application Szczegółowe informacje w Azure Portal.
  2. Kliknij pozycję Kontrola dostępu (IAM).
  3. Kliknij przycisk + Dodaj przypisanie roli.
  4. Wybierz pozycję Szczegółowe informacje Snapshot Debugger z listy rozwijanej Role.
  5. Wyszukaj i wprowadź nazwę użytkownika do dodania.
  6. Kliknij przycisk Zapisz, aby dodać użytkownika do roli.

Ważne

Należy pamiętać, że migawki mogą zawierać dane osobowe lub inne poufne informacje w wartościach zmiennych i parametrów. Dane migawek są przechowywane w tym samym regionie, w Szczegółowe informacje aplikacji.

Wyświetlanie migawek w portalu

Po utworzeniu wyjątku w aplikacji i utworzeniu migawki należy wyświetlić migawki. Od wystąpienia wyjątku do migawki gotowej i możliwej do wyświetlenia w portalu może potrwać od 5 do 10 minut. Aby wyświetlić migawki, w okienku Niepowodzenie wybierz przycisk Operacje podczas wyświetlania karty Operacje lub wybierz przycisk Wyjątki podczas wyświetlania karty Wyjątki:

Strona błędów

Wybierz operację lub wyjątek w okienku po prawej stronie, aby otworzyć okienko Szczegóły transakcji typu end-to-end, a następnie wybierz zdarzenie wyjątku. Jeśli migawka jest dostępna dla danego wyjątku, w okienku po prawej stronie pojawi się przycisk Otwórz migawkę debugowania ze szczegółami wyjątku.

Otwórz przycisk Migawka debugowania dla wyjątku

W widoku Migawka debugowania zobaczysz stos wywołań i okienko zmiennych. Po wybraniu ramek stosu wywołań w okienku stosu wywołań można wyświetlić lokalne zmienne i parametry dla tego wywołania funkcji w okienku zmiennych.

Wyświetlanie migawki debugowania w portalu

Migawki mogą zawierać informacje poufne i domyślnie nie można ich wyświetlać. Aby wyświetlić migawki, musisz mieć Application Insights Snapshot Debugger przypisaną rolę.

Wyświetlanie migawek w Visual Studio 2017 Enterprise lub 2017 r.

  1. Kliknij przycisk Pobierz migawkę, aby .diagsession pobrać plik, który można otworzyć za pomocą Visual Studio Enterprise.

  2. Aby otworzyć .diagsession plik, musisz mieć zainstalowany Snapshot Debugger Visual Studio. Składnik Snapshot Debugger jest wymaganym składnikiem obciążenia usługi ASP.NET w programie Visual Studio i można go wybrać z listy Pojedynczy składnik w instalatorze Visual Studio programu . Jeśli używasz wersji programu Visual Studio przed wersją 15.5 programu Visual Studio 2017, musisz zainstalować rozszerzenie z witryny Visual Studio Marketplace.

  3. Po otwarciu pliku migawki zostanie wyświetlona strona Minidump Debugging Visual Studio. Kliknij pozycję Debuguj kod zarządzany, aby rozpocząć debugowanie migawki. Migawka zostanie otwarta w wierszu kodu, w którym został zgłoszony wyjątek, aby można było debugować bieżący stan procesu.

    Wyświetlanie migawki debugowania w Visual Studio

Pobrana migawka zawiera wszystkie pliki symboli znalezione na serwerze aplikacji internetowej. Te pliki symboli są wymagane do skojarzenia danych migawki z kodem źródłowym. W App Service aplikacji pamiętaj o włączeniu wdrażania symboli podczas publikowania aplikacji internetowych.

Jak działają migawki

Program Snapshot Collector zaimplementowany jako procesor telemetrii Szczegółowe informacje aplikacji. Gdy aplikacja jest uruchomiona, Snapshot Collector telemetrii jest dodawany do potoku telemetrii aplikacji. Za każdym razem, gdy aplikacja wywołuje wyjątek TrackException, Snapshot Collector oblicza identyfikator problemu z typu zgłaszanego wyjątku i metody throwing. Za każdym razem, gdy aplikacja wywołuje trackException, licznik jest zwiększany dla odpowiedniego identyfikatora problemu. Gdy licznik osiągnie ThresholdForSnapshotting wartość, identyfikator problemu jest dodawany do planu kolekcji.

Aplikacja Snapshot Collector również monitorować wyjątki, gdy są zgłaszane przez subskrybowanie zdarzenia AppDomain.CurrentDomain.FirstChanceException. Po wyzłoceniu tego zdarzenia identyfikator problemu wyjątku jest obliczany i porównywany z identyfikatorami problemów w planie kolekcji. Jeśli istnieje dopasowanie, tworzona jest migawka uruchomionego procesu. Migawka ma przypisany unikatowy identyfikator, a wyjątek jest oznaczany za pomocą tego identyfikatora. Po zakończeniu procedury obsługi FirstChanceException zgłaszany wyjątek jest przetwarzany w zwykły sposób. Po pewnym czasie wyjątek ponownie osiągnie metodę TrackException, gdzie wraz z identyfikatorem migawki jest zgłaszany do usługi Application Szczegółowe informacje.

Główny proces będzie nadal uruchamiany i będzie obsługiwać ruch dla użytkowników z niewielkimi zakłóceniami. W międzyczasie migawka jest przesyłana do procesu przekazywania migawki. Przekazywanie migawek tworzy minizrzuty i przesyła je do usługi Application Szczegółowe informacje wraz z odpowiednimi plikami symboli (.pdb).

Porada

  • Migawka procesu to zawieszony klon uruchomionego procesu.
  • Tworzenie migawki trwa około 10–20 milisekund.
  • Wartość domyślna dla ThresholdForSnapshotting jest 1. Jest to również wartość minimalna. W związku z tym aplikacja musi dwukrotnie wyzwolić ten sam wyjątek przed tworzeniem migawki.
  • Ustaw IsEnabledInDeveloperMode wartość true, jeśli chcesz generować migawki podczas debugowania w Visual Studio.
  • Szybkość tworzenia migawek jest ograniczona przez SnapshotsPerTenMinutesLimit ustawienie. Domyślnie limit to jedna migawka co dziesięć minut.
  • Nie można przekazać więcej niż 50 migawek dziennie.

Ograniczenia

Domyślny okres przechowywania danych wynosi 15 dni. Dla każdego Szczegółowe informacje aplikacji dziennie dozwolonych jest maksymalnie 50 migawek.

Publikowanie symboli

Środowisko Snapshot Debugger wymaga plików symboli na serwerze produkcyjnym do dekodowania zmiennych i zapewnienia debugowania w Visual Studio. Wersja 15.2 (lub nowsza) programu Visual Studio 2017 domyślnie publikuje symbole dla kompilacji wydania podczas publikowania w App Service. W poprzednich wersjach należy dodać następujący wiersz do pliku profilu publikowania, aby symbole .pubxml zostały opublikowane w trybie wydania:

    <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

W Azure Compute i innych typów upewnij się, że pliki symboli znajdują się w tym samym folderze głównej aplikacji .dll (zazwyczaj ) lub są dostępne w wwwroot/bin bieżącej ścieżce.

Uwaga

Aby uzyskać więcej informacji na temat różnych dostępnych opcji symboli, zobacz dokumentację Visual Studio . Aby uzyskać najlepsze wyniki, zalecamy użycie funkcji "Pełna", "Przenośna" lub "Osadzona".

Zoptymalizowane kompilacje

W niektórych przypadkach zmiennych lokalnych nie można wyświetlać w kompilacjach wydania ze względu na optymalizacje stosowane przez kompilator JIT. Jednak w usłudze Azure App Services usługa Snapshot Collector może zdeoptymalizować metody zgłaszania, które są częścią jej planu kolekcji.

Porada

Zainstaluj rozszerzenie Application Szczegółowe informacje Site Extension w App Service, aby uzyskać pomoc techniczną w przypadku deoptymizacji.

Następne kroki

Włącz Szczegółowe informacje Snapshot Debugger aplikacji:

Poza zakresem Szczegółowe informacje Snapshot Debugger: