Debugmomentaufnahmen von Ausnahmen in .NET-Apps

Wenn eine Ausnahme auftritt, können Sie automatisch eine Debugmomentaufnahme von Ihrer aktiven Webanwendung erfassen. Die Debugmomentaufnahme zeigt den Status des Quellcodes und der Variablen in dem Moment, in dem die Ausnahme ausgelöst wurde. Der Momentaufnahmedebugger in Azure 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.

Beziehen Sie einfach das NuGet-Paket von Snapshot Collector in Ihre Anwendung ein, und konfigurieren Sie die Auflistungsparameter in ApplicationInsights.config.

Momentaufnahmen werden unter Ausnahmen auf dem Application Insights-Blatt des Azure-Portals angezeigt.

Sie können Debugmomentaufnahmen im Portal anzeigen, um die Aufrufliste anzuzeigen und die Variablen in jedem Aufruflistenrahmen zu überprüfen. Öffnen Sie zum Verbessern Ihrer Debugleistung mit Quellcode die Momentaufnahmen mit Visual Studio Enterprise. Sie können auch Andockpunkte festlegen, um interaktiv Momentaufnahmen zu erstellen, ohne auf eine Ausnahme zu warten.

Aktivieren des Application Insights-Momentaufnahmedebuggers für Ihre Anwendung

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

  • .NET Framework- und ASP.NET-Anwendungen, die mit .NET Framework LTS oder höher ausgeführt werden.
  • .NET Core- und ASP.NET Core-Anwendungen, auf denen .NET Core LTS unter Windows ausgeführt wird.
  • .NET LTS-Anwendungen unter Windows.

Sie sollten .NET Core-Versionen vor LTS nicht verwenden, da sie nicht unterstützt werden.

Die folgenden Umgebungen werden unterstützt:

Hinweis

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

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

Erteilen von Berechtigungen

Der Zugriff auf Momentaufnahmen wird durch die rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) geschützt. Um eine Momentaufnahme zu überprüfen, muss Ihnen zuerst die erforderliche Rolle durch einen Abonnementbesitzer zugewiesen werden.

Hinweis

Weder Besitzer noch Mitwirkende erhalten diese Rolle automatisch. Wenn sie Momentaufnahmen anzeigen möchten, müssen sie sich die Rolle selbst zuweisen.

Besitzer von Abonnements sollten Benutzern, die Momentaufnahmen untersuchen, die Rolle Momentaufnahmedebugger für Application Insights zuweisen. Abonnementbesitzer können diese Rolle einzelnen Benutzern oder Gruppen für die Application Insights-Zielressource oder für die dazugehörige Ressourcengruppe oder das dazugehörige Abonnement zuweisen.

Weisen Sie der Application Insights-Momentaufnahme die Rolle „Debugger“ zu.

Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

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.

Anzeigen von Momentaufnahmen im Portal

Nachdem eine Ausnahme in Ihrer Anwendung aufgetreten ist und eine Momentaufnahme erstellt wurde, sollten Sie innerhalb von 5 bis 10 Minuten über Momentaufnahmen verfügen, die Sie im Azure-Portal einsehen können. Zur Anzeige von Momentaufnahmen wählen Sie im Bereich Fehler eine der folgenden Optionen aus:

  • Wählen Sie die Schaltfläche Vorgänge aus, wenn Sie die Registerkarte Vorgänge anzeigen, oder
  • Wählen Sie die Schaltfläche Ausnahmen aus, wenn Sie die Registerkarte Ausnahmen anzeigen.

Screenshot: Fehlerseite im Azure-Portal

Wählen Sie einen Vorgang oder eine Ausnahme im rechten Bereich aus, um den Bereich End-to-End-Transaktionsdetails zu öffnen, und wählen Sie dann das Ausnahmeereignis aus. Wenn eine Momentaufnahme für die entsprechende Ausnahme verfügbar ist, wird im rechten Bereich die Schaltfläche Debugmomentaufnahme öffnen mit Details für die Ausnahme angezeigt.

Screenshot: Schaltfläche „Debugmomentaufnahme öffnen“ bei einer Ausnahme

In der Ansicht der Debug-Momentaufnahme sehen Sie eine Aufrufliste und einen Variablenbereich. Wenn Sie Frames der Aufrufliste im Aufruflistenbereich auswählen, können Sie lokale Variablen und Parameter für diesen Funktionsaufruf im Variablenbereich anzeigen.

Screenshot: Im Azure-Portal hervorgehobene Option „Debugmomentaufnahme öffnen“

Momentaufnahmen können vertrauliche Informationen enthalten. Standardmäßig können Sie Momentaufnahmen nur sehen, wenn Ihnen die Rolle Application Insights Snapshot Debugger zugewiesen wurde.

Anzeigen von Momentaufnahmen in Visual Studio 2017 Enterprise oder höher

  1. Klicken Sie auf die Schaltfläche Momentaufnahme herunterladen, um eine Datei vom Typ .diagsession herunterzuladen, die von Visual Studio Enterprise geöffnet werden kann.

  2. Um die Datei .diagsession öffnen zu können, muss der Visual Studio-Momentaufnahmedebugger installiert sein. Der Momentaufnahmedebugger ist eine erforderliche Komponente der ASP.NET-Workload in Visual Studio und kann im Visual Studio-Installer in der Liste mit den Einzelkomponenten ausgewählt werden. Bei Visual Studio-Versionen vor Visual Studio 2017 Version 15.5 muss die Erweiterung über den Visual Studio Marketplace installiert werden.

  3. Nach dem Öffnen der Momentaufnahmedatei erscheint in Visual Studio die Minidump-Debugging-Seite. Klicken Sie auf Debug Managed Code (Verwalteten Code debuggen), um mit dem Debuggen der Momentaufnahme zu beginnen. Die Momentaufnahme wird bei der Codezeile geöffnet, in der die Ausnahme ausgelöst wurde, damit Sie den aktuellen Zustand des Prozesses debuggen können.

    Screenshot: Debugmomentaufnahme in Visual Studio

Die heruntergeladene Momentaufnahme enthält alle Symboldateien, die auf Ihrem Webanwendungsserver gefunden wurden. Diese Symboldateien sind zum Zuordnen von Quellcode und Momentaufnahmedaten erforderlich. Achten Sie bei App Service-Apps darauf, dass die Symbolbereitstellung aktiviert ist, wenn Sie Ihre Web-Apps veröffentlichen.

Funktionsweise von Momentaufnahmen

Der Snapshot Collector wird als Application Insights-Telemetrieprozessor implementiert. Wenn die Anwendung ausgeführt wird, wird der Snapshot Collector-Telemetrieprozessor der systemgenerierten Protokollpipeline Ihrer Anwendung hinzugefügt. Bei jedem Aufruf von TrackException durch Ihre Anwendung berechnet der Snapshot Collector auf der Grundlage der Art der ausgelösten Ausnahme und der auslösenden Methode eine Problem-ID. Bei jedem Aufruf von TrackException durch Ihre Anwendung erhöht sich der Zähler für die entsprechende Problem-ID. Wenn der Zähler den Wert ThresholdForSnapshotting erreicht, wird die Problem-ID einem Sammlungsplan hinzugefügt.

Der Snapshot Collector abonniert auch das Ereignis AppDomain.CurrentDomain.FirstChanceException, um ausgelöste Ausnahmen zu überwachen. Wenn dieses Ereignis ausgelöst wird, wird die Problem-ID der Ausnahme berechnet und mit den Problem-IDs im Sammlungsplan verglichen. Ist eine Entsprechung vorhanden, wird eine Momentaufnahme des ausgeführten Prozesses erstellt. Der Momentaufnahme wird ein eindeutiger Bezeichner zugewiesen, und die Ausnahme wird mit diesem Bezeichner gekennzeichnet. Nachdem der FirstChanceException-Handler zurückgekehrt ist, wird die ausgelöste Ausnahme normal verarbeitet. Letztendlich erreicht die Ausnahme wieder die Methode TrackException und wird zusammen mit dem Momentaufnahmebezeichner an Application Insights gemeldet.

Der Hauptprozess wird mit minimaler Unterbrechung weiter ausgeführt und stellt weiter Datenverkehr für Benutzer bereit. In der Zwischenzeit wird die Momentaufnahme an den Snapshot Uploader-Prozess übergeben. Der Snapshot Uploader erstellt einen Minidump mit allen relevanten Symboldateien (PDB-Dateien) und lädt ihn in Application Insights hoch.

Tipp

  • Bei einer Prozessmomentaufnahme handelt es sich um einen angehaltenen Klon des ausgeführten Prozesses.
  • Die Erstellung der Momentaufnahme dauert 10 bis 20 Millisekunden.
  • Der Standardwert für ThresholdForSnapshotting ist „1“. Das ist gleichzeitig auch der Mindestwert. Ihre App muss die gleiche Ausnahme also zweimal auslösen, bevor eine Momentaufnahme erstellt wird.
  • Legen Sie IsEnabledInDeveloperMode auf „true“ fest, wenn Sie beim Debuggen in Visual Studio Momentaufnahmen generieren möchten.
  • Die Rate der Momentaufnahmenerstellung wird durch die Einstellung SnapshotsPerTenMinutesLimit begrenzt. Standardmäßig ist das Limit auf eine einzelne Momentaufnahme pro zehn Minuten festgelegt.
  • Pro Tag können maximal 50 Momentaufnahmen hochgeladen werden.

Einschränkungen

Beibehaltung von Daten

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

Für den Momentaufnahmedebugger müssen Symboldateien auf dem Produktionsserver vorhanden sein, um Variablen zu decodieren und eine gute Debugleistung in Visual Studio zu erzielen. Die Version 15.2 (oder höher) von Visual Studio 2017 veröffentlicht Symbole für Releasebuilds standardmäßig im Rahmen der Veröffentlichung für App Service. 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 für Azure Compute und andere Typen sicher, dass die Symboldateien im selben Ordner wie die DLL-Datei der Hauptanwendung (in der Regel wwwroot/bin) liegen oder unter dem aktuellen Pfad verfügbar sind.

Hinweis

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 aufgrund von Optimierungen, die durch den JIT-Compiler angewendet werden, nicht in Releasebuilds angezeigt werden. In Azure App Services kann der Snapshot Collector allerdings Auslösemethoden deoptimieren, die Teil des entsprechenden Sammlungsplans sind.

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:

Über den Application Insights-Momentaufnahmedebugger hinaus: