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:
- Azure App Service
- Funkcja platformy Azure
- Usługa Azure Cloud Services z rodziną systemu operacyjnego 4 lub nowszą
- Usługi Azure Service Fabric uruchomione w Windows Server 2012 R2 lub nowszym
- Usługa Azure Virtual Machines i Virtual Machine Scale Sets z systemem Windows Server 2012 R2 lub nowszym
- Lokalne maszyny wirtualne lub fizyczne z systemem Windows Server 2012 R2 lub nowszym albo Windows 8.1 lub nowszym
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 .
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.
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.
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
Kliknij przycisk Pobierz migawkę
.diagsession
, aby pobrać plik, który można otworzyć przez Visual Studio Enterprise.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.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.
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 TrackException
metodę , 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:
- Azure App Service
- Funkcja platformy Azure
- usług Azure Cloud Services
- Usługi Azure Service Fabric
- Azure Virtual Machines i Virtual Machine Scale Sets
- Lokalne maszyny wirtualne lub fizyczne
Poza debugerem migawek usługi Application Insights:
- Ustaw punkty przyciągania w kodzie, aby pobierać migawki bez oczekiwania na wyjątek.
- Diagnozowanie wyjątków w aplikacjach internetowych wyjaśnia, jak zwiększyć widoczność wyjątków w usłudze Application Insights.
- Funkcja wykrywania inteligentnego automatycznie wykrywa anomalie wydajności.