Debuggen von Ausnahmen in .NET-Anwendungen mithilfe des Momentaufnahmedebuggers

Wenn diese Option aktiviert ist, sammelt der Momentaufnahmedebugger automatisch eine Debugmomentaufnahme des Quellcodes und der Variablen, wenn eine Ausnahme in Ihrer .NET-Liveanwendung auftritt. Der Momentaufnahmedebugger in Application Insights:

  • Überwacht vom System generierte Protokolle Ihrer Web-App.
  • Erfasst Momentaufnahmen Ihrer am häufigsten ausgelösten Ausnahmen.
  • Stellt Informationen bereit, die Sie für die Diagnose von Problemen in der Produktion benötigen.

Erfahren Sie mehr über die Prozesse Snapshot Debugger und Snapshot Uploader.

Unterstützte Anwendungen und Umgebungen

In diesem Abschnitt werden die unterstützten Anwendungen und Umgebungen aufgeführt.

Anwendungen

Die Momentaufnahmesammlung ist für folgende Anwendungen verfügbar:

Umgebungen

Die folgenden Umgebungen werden unterstützt:

Hinweis

Clientanwendungen (z. B. WPF, Windows Forms oder UWP) werden nicht unterstützt.

Voraussetzungen für die Verwendung des Snapshot-Debuggers

Pakete und Konfigurationen

Berechtigungen

Funktionsweise des Momentaufnahmedebuggers

Der Momentaufnahmedebugger wird als Application Insights-Telemetrieprozessor implementiert. Bei Ausführung der Anwendung wird der Momentaufnahmedebugger-Telemetrieprozessor der systemseitig generierten Protokollpipeline Ihrer Anwendung hinzugefügt.

Wichtig

Momentaufnahmen können personenbezogene Daten oder andere vertrauliche Informationen in Variablen- und Parameterwerten enthalten. Momentaufnahmedaten werden in derselben Region wie Ihre Application Insights-Ressource gespeichert.

Momentaufnahmedebugger-Prozess

Der Momentaufnahmedebugger-Prozess beginnt und endet mit der TrackException-Methode. Eine Prozessmomentaufnahme ist ein angehaltener Klon des ausgeführten Prozesses, sodass Ihre Benutzer nur wenig bis gar keine Unterbrechungen erleben. Typisches Szenario:

  1. Ihre Anwendung löst TrackException aus.

  2. Der Momentaufnahmedebugger überwacht Ausnahmen, während sie ausgelöst werden, indem er das AppDomain.CurrentDomain.FirstChanceException-Ereignis abonniert.

  3. Ein Zähler für die Problem-ID wird inkrementiert.

    • Wenn der Zähler den Wert ThresholdForSnapshotting erreicht, wird die Problem-ID einem Sammlungsplan hinzugefügt.

    Hinweis

    Der ThresholdForSnapshotting-Standardwert ist 1. Mit diesem Wert muss Ihre App die gleiche Ausnahme also zweimal auslösen, bevor eine Momentaufnahme erstellt wird.

  4. Die Problem-ID des Ausnahmeereignisses wird berechnet und mit den Problem-IDs im Sammlungsplan verglichen.

  5. Ist eine Entsprechung mit einer Problem-ID vorhanden, wird eine Momentaufnahme des ausgeführten Prozesses erstellt.

    • Der Momentaufnahme wird ein eindeutiger Bezeichner zugewiesen, und die Ausnahme wird mit diesem Bezeichner gekennzeichnet.

    Hinweis

    Die Rate der Momentaufnahmenerstellung wird durch die Einstellung SnapshotsPerTenMinutesLimit begrenzt. Standardmäßig ist das Limit auf eine einzelne Momentaufnahme pro zehn Minuten festgelegt.

  6. Nachdem der FirstChanceException-Handler zurückgekehrt ist, wird die ausgelöste Ausnahme normal verarbeitet.

  7. Die Ausnahme erreicht wieder die Methode TrackException und wird zusammen mit dem Momentaufnahmebezeichner an Application Insights gemeldet.

Hinweis

Legen Sie IsEnabledInDeveloperMode auf true fest, wenn Sie beim Debuggen in Visual Studio Momentaufnahmen generieren möchten.

Snapshot Uploader-Prozess

Während der Momentaufnahmedebugger-Prozess weiterläuft und den Datenverkehr für die Benutzer ohne größere Unterbrechung bereitstellt, wird die Momentaufnahme an den Momentaufnahmedebugger-Prozess übergeben. In einem typischen Szenario führt der Momentaufnahmedebugger Folgendes aus:

  1. Erstellt einen Minidump.

  2. Lädt den Minidump zusammen mit allen relevanten Symboldateien (.pdb) in Application Insights hoch.

Hinweis

Pro Tag können maximal 50 Momentaufnahmen hochgeladen werden.

Wenn Sie den Momentaufnahmedebugger aktiviert haben, aber keine Momentaufnahmen angezeigt werden, lesen Sie den Leitfaden zur Problembehandlung.

Aktualisieren des Momentaufnahmedebuggers

Für den Momentaufnahmedebugger werden über die integrierte, vorinstallierte Application Insights-Websiteerweiterung automatische Upgrades durchgeführt.

Das manuelle Hinzufügen einer Application Insights-Websiteerweiterung, um den Momentaufnahmedebugger auf dem neuesten Stand zu halten, ist veraltet.

Gemeinkosten

Der Momentaufnahmedebugger ist für die Verwendung in Produktionsumgebungen vorgesehen. Die Standardeinstellungen enthalten Ratenbegrenzungen, um die Auswirkungen auf Ihre Anwendungen zu minimieren.

Es kann jedoch zu geringem CPU-, Arbeitsspeicher- und E/A-Mehraufwand im Zusammenhang mit dem Momentaufnahmedebugger kommen, wie z. B.:

  • Wenn eine Ausnahme in Ihrer Anwendung ausgelöst wird
  • Wenn der Ausnahmehandler entscheidet, eine Momentaufnahme zu erstellen
  • Wenn TrackException aufgerufen wird

Es fallen keine zusätzlichen Kosten für das Speichern der Daten an, die vom Momentaufnahmedebugger erfasst werden.

Sehen Sie sich Beispielszenarien an, in denen Mehraufwand durch den Momentaufnahmedebugger auftreten kann.

Begrenzungen

In diesem Abschnitt werden die Einschränkungen für den Momentaufnahmedebugger erläutert.

  • Datenaufbewahrung

    Debugmomentaufnahmen werden 15 Tage lang gespeichert. Die Standardrichtlinie zur Datenaufbewahrung wird für jede Anwendung festgelegt. Wenn Sie diesen Wert erhöhen möchten, können Sie eine Erhöhung anfordern, indem Sie einen Supportfall im Azure-Portal eröffnen. Für jede Application Insights-Instanz ist eine maximale Anzahl von 50 Momentaufnahmen pro Tag zulässig.

  • Veröffentlichen von Symbolen

    Der Momentaufnahmedebugger erfordert für die folgenden Aufgaben Symboldateien auf dem Produktionsserver:

    • Decodieren von Variablen
    • Bereitstellen einer Debugfunktion in Visual Studio

    Standardmäßig veröffentlicht Visual Studio 2017 ab Version 15.2 Symbole für Release-Builds, wenn es im App Service veröffentlicht wird.

    In Vorgängerversionen müssen Sie der Veröffentlichungsprofildatei vom Typ .pubxml die folgende Zeile hinzufügen, um Symbole im Releasemodus zu veröffentlichen:

         <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
    

    Stellen Sie bei Azure Compute und anderen Typen sicher, dass die Symboldateien entweder:

    • Im gleichen Ordner der Standard-Anwendung .dll (in der Regel wwwroot/bin) oder
    • Im aktuellen Pfad verfügbar sind.

    Weitere Informationen zu den verschiedenen verfügbaren Symboloptionen finden Sie in der Visual Studio-Dokumentation. Damit Sie die besten Ergebnisse erhalten, empfehlen wir Ihnen, Vollständig, Portabel oder Eingebettet zu verwenden.

  • Optimierte Builds

    In einigen Fällen können lokale Variablen in Release-Builds nicht angezeigt werden, weil der JIT-Compiler Optimierungen vornimmt.

    In App Service kann der Momentaufnahmedebugger jedoch Auslösemethoden, die Teil seines Sammelplans sind, deoptimieren.

    Tipp

    Installieren Sie in Ihrer App Service-Instanz die Application Insights-Websiteerweiterung, um Deoptimierungsunterstützung zu erhalten.

Nächste Schritte

Aktivieren des Application Insights-Momentaufnahmedebuggers für Ihre Anwendung: