Debugowanie migawek wyjątków w aplikacjach .NET

Gdy wystąpi wyjątek, możesz automatycznie zebrać migawkę debugowania z aktywnej aplikacji internetowej. Migawka debugowania pokazuje stan kodu źródłowego i zmiennych w momencie zgłoszenia wyjątku. Debuger migawek w usłudze aplikacja systemu Azure Insights:

  • Monitoruje dzienniki generowane przez system z poziomu aplikacji internetowej.
  • Zbiera migawki w wyjątkach zgłaszanych najczęściej.
  • Zawiera informacje potrzebne do diagnozowania problemów w środowisku produkcyjnym.

Wystarczy uwzględnić pakiet NuGet modułu zbierającego migawki w aplikacji i skonfigurować parametry kolekcji w programie ApplicationInsights.config.

Migawki są wyświetlane w okienku Wyjątki w usłudze Application Insights Azure 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 kodu źródłowego, otwórz migawki za pomocą Visual Studio Enterprise. Punkty przyciągania można również ustawić tak, aby interaktywnie tworzyły migawki bez oczekiwania na wyjątek.

Włączanie debugera migawek usługi Application Insights dla aplikacji

Kolekcja migawek jest dostępna dla:

  • .NET Framework i ASP.NET aplikacje z systemem .NET Framework LTS lub nowszym.
  • Aplikacje .NET Core i ASP.NET Core z systemem .NET Core LTS w systemie Windows.
  • Aplikacje .NET LTS w systemie Windows.

Nie zalecamy używania wersji platformy .NET Core przed wersją LTS, ponieważ nie są one obsługiwane.

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 narzędzie 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 opartą na rolach (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ą tej roli automatycznie. Jeśli chcą wyświetlać migawki, muszą dodać się do roli.

Właściciele subskrypcji powinni przypisać rolę debugera migawek usługi Application Insights do użytkowników, którzy będą sprawdzać migawki. Tę rolę można przypisać do poszczególnych użytkowników lub grup według właścicieli subskrypcji dla docelowego zasobu usługi Application Insights lub grupy zasobów lub subskrypcji.

Przypisz rolę debugera do migawki usługi Application Insights.

Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Ważne

Migawki mogą zawierać dane osobowe lub inne poufne informacje w wartościach zmiennych i parametrów. Dane migawek są przechowywane w tym samym regionie co zasób usługi App Insights.

Wyświetlanie migawek w portalu

Po wystąpieniu wyjątku w aplikacji i utworzeniu migawki należy mieć migawki do wyświetlenia w Azure Portal w ciągu 5 do 10 minut. Aby wyświetlić migawki, w okienku Niepowodzenie wykonaj jedną z następujących czynności:

  • Wybierz przycisk Operacje podczas wyświetlania karty Operacje lub
  • Wybierz przycisk Wyjątki podczas wyświetlania karty Wyjątki .

Zrzut ekranu przedstawiający stronę błędów w Azure Portal.

Wybierz operację lub wyjątek w okienku po prawej stronie, aby otworzyć okienko Szczegóły transakcji kompleksowej , a następnie wybierz zdarzenie wyjątku. Jeśli migawka jest dostępna dla danego wyjątku, w okienku po prawej stronie zostanie wyświetlony przycisk Otwórz migawkę z szczegółami wyjątku.

Zrzut ekranu przedstawiający przycisk Otwórz migawkę debugowania w wyjątku.

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

Zrzut ekranu przedstawiający migawkę otwórz debugowanie wyróżnioną w Azure Portal.

Migawki mogą zawierać informacje poufne. Domyślnie migawki można wyświetlać tylko wtedy, gdy przypisano Application Insights Snapshot Debugger rolę.

Wyświetlanie migawek w programie Visual Studio 2017 Enterprise lub nowszym

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

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

  3. Po otwarciu pliku migawki zostanie wyświetlona strona Debugowanie minidump w programie Visual Studio. Kliknij pozycję Debuguj zarządzany kod , 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.

    Zrzut ekranu przedstawiający migawkę debugowania w programie 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 przypadku aplikacji App Service pamiętaj, aby włączyć wdrażanie symboli podczas publikowania aplikacji internetowych.

Jak działają migawki

Moduł zbierający migawki jest implementowany jako procesor telemetryczny usługi Application Insights. Po uruchomieniu aplikacji procesor telemetryczny modułu zbierającego migawki jest dodawany do potoku dzienników generowanych przez system aplikacji. Za każdym razem, gdy aplikacja wywołuje wyjątek TrackException, moduł zbierający migawki oblicza identyfikator problemu z typu zgłaszanego wyjątku i metody zgłaszania. Za każdym razem, gdy aplikacja wywołuje TrackExceptionmetodę , licznik jest zwiększany dla odpowiedniego identyfikatora problemu. Gdy licznik osiągnie ThresholdForSnapshotting wartość, identyfikator problemu zostanie dodany do planu kolekcji.

Moduł zbierający migawki monitoruje również wyjątki w miarę ich zgłaszania przez subskrybowanie zdarzenia AppDomain.CurrentDomain.FirstChanceException . Gdy to zdarzenie jest uruchamiane, identyfikator problemu wyjątku jest obliczany i porównywany z identyfikatorami problemów w planie kolekcji. Jeśli istnieje dopasowanie, zostanie utworzona migawka uruchomionego procesu. Migawka ma przypisany unikatowy identyfikator, a wyjątek jest oznaczany tym identyfikatorem. Po powrocie FirstChanceException programu obsługi zgłoszony wyjątek jest przetwarzany normalnie. W końcu wyjątek ponownie TrackException dociera do metody, w której wraz z identyfikatorem migawki jest zgłaszany do usługi Application Insights.

Główny proces nadal działa i obsługuje ruch do użytkowników z niewielką przerwą. W międzyczasie migawka jest przekazywana do procesu przekazywania migawek. Narzędzie do przekazywania migawek tworzy minidump i przekazuje go do usługi Application Insights wraz z dowolnymi odpowiednimi plikami symboli (pdb).

Porada

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

Ograniczenia

Przechowywanie danych

Migawki debugowania są przechowywane przez 15 dni. Domyślne zasady przechowywania danych są ustawiane dla poszczególnych aplikacji. Jeśli chcesz zwiększyć tę wartość, możesz poprosić o zwiększenie, otwierając zgłoszenie do pomocy technicznej w Azure Portal. Dla każdego wystąpienia usługi Application Insights dozwolona jest maksymalna liczba 50 migawek dziennie.

Symbole publikowania

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

    <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

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

Uwaga

Aby uzyskać więcej informacji na temat różnych dostępnych opcji symboli, zobacz dokumentację programu Visual Studio. Aby uzyskać najlepsze wyniki, zalecamy użycie opcji "Full", "Portable" lub "Embedded".

Zoptymalizowane kompilacje

W niektórych przypadkach zmiennych lokalnych nie można wyświetlić w kompilacjach wydania z powodu optymalizacji stosowanych przez kompilator JIT. Jednak w usługach aplikacja systemu Azure moduł zbierający migawki może deoptymalizować metody zgłaszania, które są częścią planu kolekcji.

Porada

Zainstaluj rozszerzenie witryny usługi Application Insights w App Service, aby uzyskać obsługę usuwania optymalizacji.

Następne kroki

Włącz debuger migawek usługi Application Insights dla aplikacji:

Poza debugerem migawek usługi Application Insights: