Debugowanie wyjątków w aplikacjach .NET przy użyciu narzędzia Snapshot Debugger

Po włączeniu narzędzie Snapshot Debugger automatycznie zbiera migawkę debugowania kodu źródłowego i zmiennych, gdy wystąpi wyjątek w aplikacji .NET na żywo. Debuger migawek w usłudze Application Insights:

  • Monitoruje dzienniki generowane przez system z poziomu aplikacji internetowej.
  • Zbiera migawki dotyczące najwyższych wyjątków.
  • Zawiera informacje potrzebne do diagnozowania problemów w środowisku produkcyjnym.

Obsługiwane aplikacje i środowiska

Aplikacje

Kolekcja migawek jest dostępna dla:

Środowiska

Narzędzie Snapshot Debugger obsługuje następujące środowiska:

Uwaga

Aplikacje klienckie, takie jak WPF, Windows Forms lub UWP, nie są obsługiwane.

Wymagania wstępne dotyczące debugera migawek

Pakiety i konfiguracje

Uprawnienia

Jak działa debuger migawek

Debugger Snapshot działa jako procesor telemetrii usługi Application Insights. Gdy aplikacja działa, procesor telemetrii narzędzia Snapshot Debugger dołącza do potoku dzienników generowanych automatycznie przez aplikację.

Ważne

Migawki mogą zawierać dane osobowe lub inne poufne informacje w wartościach zmiennych i parametrów. Usługa Application Insights przechowuje dane migawek w tym samym regionie co zasób.

Proces debugowania migawkowego

Proces debugera migawek rozpoczyna się i kończy się TrackException metodą . Migawka procesu jest zawieszonym klonem uruchomionego procesu. Użytkownicy nie mają żadnych przerw w działaniu. W typowym scenariuszu:

  1. Aplikacja zgłasza wyjątek i zgłasza go do usługi Application Insights, wywołując metodę TrackException .

  2. Debuger migawek monitoruje wyjątki w miarę ich zgłaszania przez subskrybowanie zdarzenia AppDomain.CurrentDomain.FirstChanceException .

  3. Debuger migawek zwiększa licznik dla identyfikatora problemu.

    Gdy licznik osiągnie wartość ThresholdForSnapshotting, Snapshot Debugger doda identyfikator problemu do planu zbierania.

    Uwaga

    Domyślna wartość minimalna ThresholdForSnapshotting to 1. Przy tej wartości aplikacja musi spowodować wystąpienie tego samego wyjątku dwa razy, zanim Debuger migawek utworzy migawkę.

  4. Narzędzie Snapshot Debugger oblicza identyfikator problemu dla zdarzenia wyjątku i porównuje go z identyfikatorami problemów w planie zbierania.

  5. Jeśli identyfikatory problemów są zgodne, narzędzie Snapshot Debugger tworzy migawkę uruchomionego procesu.

    Debuger zrzutów przypisuje zrzutowi unikatowy identyfikator i opatruje wyjątek tym identyfikatorem.

    Uwaga

    Ustawienie SnapshotsPerTenMinutesLimit ogranicza szybkość tworzenia migawek. Domyślnie limit to jedna migawka co 10 minut.

  6. Po powrocie FirstChanceException programu obsługi aplikacja przetwarza zgłoszony wyjątek w zwykły sposób.

  7. Wyjątek ponownie trafia do metody TrackException, która zgłasza go do usługi Application Insights wraz z identyfikatorem migawki.

Uwaga

Ustaw IsEnabledInDeveloperMode na true, aby generować migawki podczas debugowania w programie Visual Studio.

Proces przesyłania migawek za pomocą uploadera

Podczas gdy proces Snapshot Debugger nadal działa i obsługuje ruch użytkowników, powodując jedynie niewielkie zakłócenia, przekazuje migawkę do procesu Snapshot Uploader. W typowym scenariuszu Uploader migawek:

  1. Tworzy minidump.

  2. Przekazuje minidump do usługi Application Insights wraz ze wszystkimi odpowiednimi plikami symboli (.pdb).

Uwaga

Program do przesyłania migawek może przesłać nie więcej niż 50 migawek dziennie.

Jeśli włączono debuger migawek, ale nie widzisz migawek, zobacz Przewodnik rozwiązywania problemów.

Uaktualnij debuger migawek

Automatyczne uaktualnianie debugera migawek przy użyciu wbudowanego, wstępnie zainstalowanego rozszerzenia witryny usługi Application Insights.

Ręczne dodawanie rozszerzenia witryny usługi Application Insights w celu zapewnienia aktualności debugera migawek jest przestarzałe.

Obciążenie debugera migawek

Debuger migawek jest przeznaczony do użytku w środowiskach produkcyjnych. Ustawienia domyślne obejmują limity szybkości, aby zminimalizować wpływ na aplikacje.

Może jednak wystąpić niewielkie obciążenie procesora, pamięci i wejścia/wyjścia związane z debugerem migawek, na przykład:

  • Gdy aplikacja zgłasza wyjątek
  • Jeśli program obsługi wyjątków zdecyduje się utworzyć migawkę
  • Gdy TrackException jest wywoływany

Nie ma dodatkowych kosztów przechowywania danych przechwyconych przez debuger migawek.

Zobacz przykładowe scenariusze, w których może wystąpić obciążenie narzędzia Snapshot Debugger.

Optymalizacje kodu

Jeśli narzędzie Snapshot Debugger zbiera migawki z aplikacji, w skonsolidowanym przeglądzie optymalizacji kodu mogą zostać wyświetlone powiązane szczegółowe informacje o wyjątkach.

Ograniczenia debugera migawek

Debuger migawek ma następujące ograniczenia:

  • Przechowywanie danych

    Migawki debugowania są przechowywane przez 15 dni. Domyślne zasady przechowywania danych są ustawiane dla poszczególnych aplikacji. Aby zwiększyć tę wartość, otwórz zgłoszenie do pomocy technicznej w portalu Azure. Każde wystąpienie usługi Application Insights umożliwia maksymalnie 50 migawek dziennie.

  • Symbole publikowania

    Debuger migawek wymaga plików symboli na serwerze produkcyjnym, aby:

    • Dekoduj zmienne
    • Zapewnianie środowiska debugowania w programie Visual Studio

    Domyślnie program Visual Studio 2017 w wersji 15.2 lub nowszej publikuje symbole kompilacji wydania podczas publikowania w usłudze App Service.

    W poprzednich wersjach należy dodać następującą linię do pliku profilu .pubxml publikowania, aby symbole zostały opublikowane w trybie release:

        <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
    

    W przypadku Azure Compute i innych typów upewnij się, że pliki symboli są następujące:

    • W tym samym folderze głównej aplikacji .dll (zazwyczaj wwwroot/bin), lub
    • Dostępne w bieżącej ścieżce.

    Aby uzyskać więcej informacji na temat dostępnych opcji symboli, zobacz dokumentację Visual Studio. Aby uzyskać najlepsze wyniki, użyj opcji Full, Portable lub Embedded.

  • Zoptymalizowane kompilacje

    W niektórych przypadkach nie można wyświetlić zmiennych lokalnych w kompilacjach wydania, ponieważ kompilator JIT stosuje optymalizacje.

    Jednak w App Service debuger migawek może deoptymalizować metody zgłaszania, które są częścią planu kolekcji.

    Napiwek

    Zainstaluj rozszerzenie witryny Application Insights w usłudze App Service, aby uzyskać obsługę deoptymalizacji.

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