Problembehandlung und bekannte Probleme beim debuggen von Momentaufnahme in Visual Studio

              Gilt für: Visual Studio

Dieser Artikel enthält Lösungen für häufige Probleme, die beim Debuggen einer Azure-App mit dem Momentaufnahmedebugger in Visual Studio auftreten können.

Wenn das Problem mit den in diesem Artikel beschriebenen Schritten nicht behoben werden kann, suchen Sie auf Entwicklercommunity nach dem Problem, oder melden Sie ein neues Problem, indem Sie in Visual Studio Hilfe>>Feedback sendenProblem melden auswählen.

Problem: "Momentaufnahmedebugger anfügen" tritt auf einen HTTP-status Codefehler

Wenn während des Anfügens der folgende Fehler im Ausgabefenster angezeigt wird, kann es sich um ein bekanntes Problem handelt, das in den folgenden Abschnitten aufgeführt ist. Probieren Sie die vorgeschlagenen Lösungen aus, und wenden Sie sich an den vorangehenden Alias, wenn das Problem weiterhin besteht.

[TIMESTAMP] Error --- Unable to Start Snapshot Debugger - Attach Snapshot Debugger failed: System.Net.WebException: The remote server returned an error: (###) XXXXXX

(401) Nicht autorisiert

Dieser Fehler weist darauf hin, dass der von Visual Studio an Azure ausgegebene REST-Aufruf ungültige Anmeldeinformationen verwendet.

Führen Sie die folgenden Schritte aus:

  • Stellen Sie sicher, dass Ihr Visual Studio-Personalisierungskonto über Berechtigungen für das Azure-Abonnement und die Ressource verfügt, an die Sie anhängen. Eine schnelle Möglichkeit, dies zu ermitteln, besteht darin, zu überprüfen, ob die Ressource im Dialogfeld debuggen>Momentaufnahmedebugger anfügen... verfügbar ist.>Azure-Ressource>Wählen Sie Vorhandene oder in Cloud Explorer aus.
  • Wenn dieser Fehler weiterhin besteht, verwenden Sie einen der am Anfang dieses Artikels beschriebenen Feedbackkanäle.

Wenn Sie Authentifizierung/Autorisierung (EasyAuth) auf Ihrem App Service aktiviert haben, tritt möglicherweise ein 401-Fehler mit LaunchAgentAsync in der Aufrufliste-Fehlermeldung auf. Stellen Sie sicher, dass die auszuführende Aktion, wenn die Anforderung nicht authentifiziert ist, im Azure-Portal auf Anonyme Anforderungen zulassen (keine Aktion) festgelegt ist, und geben Sie stattdessen eine authorization.json in D:\Home\sites\wwwroot mit dem folgenden Inhalt an.

{
  "routes": [
    {
      "path_prefix": "/",
      "policies": {
        "unauthenticated_action": "RedirectToLoginPage"
      }
    },
    {
      "http_methods": [ "POST" ],
      "path_prefix": "/41C07CED-2E08-4609-9D9F-882468261608/api/agent",
      "policies": {
        "unauthenticated_action": "AllowAnonymous"
      }
    }
  ]
}

Die erste Route schützt Ihre App-Domäne effektiv, ähnlich wie bei der Anmeldung mit [IdentityProvider].. Die zweite Route macht den SnapshotDebugger-AgentLaunch-Endpunkt außerhalb der Authentifizierung verfügbar, der die vordefinierte Aktion zum Starten des SnapshotDebugger-Diagnose-Agents nur ausführt, wenn die vorinstallierte Siteerweiterung SnapshotDebugger für Ihren App-Dienst aktiviert ist. Weitere Informationen zur konfiguration der authorization.json finden Sie unter URL-Autorisierungsregeln.

(403) Verboten

Der Fehler 403 – Verboten gibt an, dass die Berechtigung verweigert wurde. Dieser Fehler kann in vielen verschiedenen Szenarien auftreten.

Führen Sie die folgenden Schritte aus:

  • Vergewissern Sie sich, dass Ihr Visual Studio-Konto über ein gültiges Azure-Abonnement mit den erforderlichen RBAC-Berechtigungen (Role-Based Access Control) für die Ressource verfügt. Überprüfen Sie für AppService, ob Sie über Berechtigungen zum Abfragen des App Service Plans verfügen, der Ihre App hosten soll.
  • Überprüfen Sie, ob der Zeitstempel Ihres Clientcomputers korrekt und aktuell ist. Server, deren Zeitstempel um mehr als 15 Minuten nach dem Anforderungszeitstempel deaktiviert sind, verursachen in der Regel diesen Fehler.
  • Wenn dieser Fehler weiterhin besteht, verwenden Sie einen der am Anfang dieses Artikels beschriebenen Feedbackkanäle.

(404) Nicht gefunden

Der Fehler 404 – Nicht gefunden gibt an, dass die Website auf dem Server nicht gefunden werden konnte.

Führen Sie die folgenden Schritte aus:

  • Vergewissern Sie sich, dass eine Website auf der App Service-Ressource, an die Sie angefügt sind, bereitgestellt und ausgeführt wird.
  • Überprüfen Sie, ob die Website unter https://< resource.azurewebsites.net> verfügbar ist.
  • Vergewissern Sie sich, dass Ihre ordnungsgemäß ausgeführte benutzerdefinierte Webanwendung beim Zugriff unter https://< resource.azurewebsites.net> keinen status Code 404 zurückgibt.
  • Wenn dieser Fehler weiterhin besteht, verwenden Sie einen der am Anfang dieses Artikels beschriebenen Feedbackkanäle.

(406) Nicht zulässig

Der Fehler 406 – Nicht akzeptabel gibt an, dass der Server auf den im Accept-Header der Anforderung festgelegten Typ nicht reagieren kann.

Führen Sie die folgenden Schritte aus:

  • Vergewissern Sie sich, dass Ihre Website unter https://< resource.azurewebsites.net> verfügbar ist.
  • Vergewissern Sie sich, dass Ihre Website nicht zu neuen Instanzen migriert wurde. Der Momentaufnahmedebugger verwendet das Konzept von ARRAffinity zum Weiterleiten von Anforderungen an bestimmte Instanzen, die diesen Fehler zeitweilig verursachen können.
  • Wenn dieser Fehler weiterhin besteht, verwenden Sie einen der am Anfang dieses Artikels beschriebenen Feedbackkanäle.

(409) Konflikt

Der Fehler 409 – Konflikt gibt an, dass die Anforderung mit dem aktuellen Serverstatus in Konflikt steht.

Dies ist ein bekanntes Problem, das auftritt, wenn ein Benutzer versucht, den Momentaufnahmedebugger an einen AppService anzufügen, der ApplicationInsights aktiviert hat. ApplicationInsights legt die AppSettings mit einer anderen Groß-/Kleinschreibung als Visual Studio fest, wodurch dieses Problem verursacht wird.

Dies wurde in Visual Studio 2019 behoben.

Führen Sie die folgenden Schritte aus:

  • Wenn dieser Fehler weiterhin besteht, verwenden Sie einen der am Anfang dieses Artikels beschriebenen Feedbackkanäle.

(500) Interner Serverfehler

Der Fehler 500 – Interner Serverfehler gibt an, dass der Standort ausgefallen ist oder der Server die Anforderung nicht verarbeiten kann. Der Momentaufnahmedebugger funktioniert nur bei ausgeführten Anwendungen. Der Application Insights-Momentaufnahmedebugger bietet Momentaufnahmen für Ausnahmen und ist möglicherweise das beste Tool für Ihre Anforderungen.

(502) Ungültiges Gateway

Der Fehler 502 – Ungültiges Gateway weist auf ein serverseitiges Netzwerkproblem hin und kann vorübergehend sein.

Führen Sie die folgenden Schritte aus:

  • Warten Sie einige Minuten, bevor Sie den Momentaufnahmedebugger erneut anfügen.
  • Wenn dieser Fehler weiterhin besteht, verwenden Sie einen der am Anfang dieses Artikels beschriebenen Feedbackkanäle.

Problem: Andockpunkt ist nicht aktiviert

Wenn ein Warnsymbol mit Ihrem Andockpunkt anstelle des regulären Andockpunktsymbols angezeigt wird, ist der Andockpunkt nicht aktiviert.

Screenshot, der zeigt, dass Snappoint nicht aktiviert wird.

Führen Sie die folgenden Schritte aus:

  • Stellen Sie sicher, dass Sie dieselbe Version des Quellcodes verwenden, um Ihre App zu erstellen und bereitzustellen.
  • Stellen Sie sicher, dass Sie die richtigen Symbole für Ihre Bereitstellung laden.
  • Zeigen Sie dazu das Fenster Module beim Debuggen von Momentaufnahmen an, und überprüfen Sie, ob in der Spalte Symboldatei eine PDB-Datei angezeigt wird, die für das Zu debuggende Modul geladen wurde.
    • Der Momentaufnahmedebugger versucht, Symbole automatisch herunterzuladen und für Ihre Bereitstellung zu verwenden.

Problem: Symbole werden nicht geladen, wenn ich eine Momentaufnahme öffne

Wenn das folgende Fenster angezeigt wird, wurden keine Symbole geladen.

Screenshot, der zeigt, dass Symbole nicht geladen werden.

Führen Sie die folgenden Schritte aus:

  • Wählen Sie auf der Seite Symboleinstellungen ändern... aus.

  • Fügen Sie in den Einstellungen des Debugsymbols > ein Symbolcacheverzeichnis hinzu.

  • Starten Sie Momentaufnahme Debuggen neu, nachdem der Symbolpfad festgelegt wurde.

    Die in Ihrem Projekt verfügbaren Symbole oder PDB-Dateien müssen mit Ihrer App Service Bereitstellung übereinstimmen. Die meisten Bereitstellungen (Bereitstellung über Visual Studio, CI/CD mit Azure Pipelines oder Kudu usw.) veröffentlichen Ihre Symboldateien zusammen mit Ihrem App Service. Durch Festlegen des Symbolcacheverzeichnisses kann Visual Studio diese Symbole verwenden.

    Screenshot: Einstellungen für Symbole

  • Wenn Ihr organization einen Symbolserver verwendet oder Symbole in einem anderen Pfad löscht, verwenden Sie alternativ die Symboleinstellungen, um die richtigen Symbole für Ihre Bereitstellung zu laden.

Problem: Die Option "Momentaufnahmedebugger anfügen" wird im Cloud-Explorer

Führen Sie die folgenden Schritte aus:

  • Stellen Sie sicher, dass die Komponente Momentaufnahmedebugger installiert ist. Öffnen Sie die Visual Studio-Installer, und überprüfen Sie die Komponente Momentaufnahmedebugger in der Azure-Workload.

  • Stellen Sie für Visual Studio 2019 oder höhere Versionen sicher, dass Ihre App unterstützt wird:

    • Azure-App Services: ASP.NET Anwendungen, die unter .NET Framework 4.6.1 oder höher ausgeführt werden.
    • Azure-App Services: ASP.NET Core Anwendungen, die unter .NET Core 2.0 oder höher unter Windows ausgeführt werden.
    • Azure Virtual Machines (und VM-Skalierungsgruppe): ASP.NET Anwendungen, die unter .NET Framework 4.6.1 oder höher ausgeführt werden.
    • Azure Virtual Machines (und VM-Skalierungsgruppe): ASP.NET Core Anwendungen, die unter .NET Core 2.0 oder höher unter Windows ausgeführt werden.
    • Azure Kubernetes Services: ASP.NET Core Anwendungen, die unter .NET Core 2.2 oder höher unter Debian 9 ausgeführt werden.
    • Azure Kubernetes Services: ASP.NET Core Anwendungen, die unter .NET Core 2.2 oder höher unter Alpine 3.8 ausgeführt werden.
    • Azure Kubernetes Services: ASP.NET Core Anwendungen, die unter .NET Core 2.2 oder höher unter Ubuntu 18.04 ausgeführt werden.

Problem: In den Diagnosetools werden nur gedrosselte Momentaufnahmen angezeigt.

Screenshot: Gedrosselter Andockpunkt

Führen Sie die folgenden Schritte aus:

  • Momentaufnahmen beanspruchen wenig Arbeitsspeicher, haben jedoch eine Commitgebühr. Wenn der Momentaufnahmedebugger erkennt, dass ihr Server stark ausgelastet ist, erstellt er keine Momentaufnahmen. Sie können bereits erfasste Momentaufnahmen löschen, indem Sie die Momentaufnahmedebuggersitzung beenden und es erneut versuchen.

Problem: Beim Debuggen von Momentaufnahmen mit mehreren Versionen von Visual Studio treten Fehler auf (Visual Studio 2019 oder höher)

Visual Studio 2019 erfordert eine neuere Version der Momentaufnahmedebugger-Websiteerweiterung auf Ihrem Azure App Service. Diese Version ist nicht kompatibel mit der älteren Version der Websiteerweiterung momentaufnahmedebugger, die von Visual Studio 2017 verwendet wird. Der folgende Fehler wird angezeigt, wenn Sie versuchen, den Momentaufnahmedebugger in Visual Studio 2019 an einen Azure App Service anzufügen, der zuvor vom Momentaufnahmedebugger in Visual Studio 2017 gedebuggt wurde:

Screenshot der inkompatiblen Momentaufnahmedebugger-Websiteerweiterung in Visual Studio 2019.

Wenn Sie dagegen Visual Studio 2017 verwenden, um den Momentaufnahmedebugger an eine Azure App Service anzufügen, die zuvor vom Momentaufnahmedebugger in Visual Studio 2019 debuggt wurde, erhalten Sie die folgende Fehlermeldung:

Screenshot der inkompatiblen Momentaufnahmedebugger-Websiteerweiterung in Visual Studio 2017.

Um dies zu beheben, löschen Sie die folgenden App-Einstellungen im Azure-Portal, und fügen Sie den Momentaufnahmedebugger erneut an:

  • INSTRUMENTATIONENGINE_EXTENSION_VERSION
  • SNAPSHOTDEBUGGER_EXTENSION_VERSION

Problem: Ich hänge an die falsche/alte Azure-Ressource oder das falsche Speicherkonto an.

Führen Sie die folgenden Schritte aus:

Die Einträge "Azure-Ressource" und "Speicherkonto" verwenden Ressourcennamen als Schlüssel, sodass Aktionen wie das Migrieren einer Ressource zu verschiedenen Abonnements Probleme verursachen können. Führen Sie die folgenden Schritte aus, um die Liste zu löschen:

  1. Führen Sie diese Befehle in der Developer-Eingabeaufforderung für VS (mit Administratorrechten) aus.

    vsregedit remove local HKCU SnapshotDebugger AzureResourcesMRU
    vsregedit remove local HKCU SnapshotDebugger StorageAccountsMRU
    
  2. Löschen Sie alle suo-Dateien , die der Web-App zugeordnet sind.

Problem: Ich habe Probleme beim Debuggen von Momentaufnahmen, und ich muss mehr Protokollierung aktivieren.

Aktivieren von Agent-Protokollen

Um die Agent-Protokollierung zu aktivieren und zu deaktivieren, öffnen Sie Visual Studio, und navigieren Sie zu Extras>Optionen>Momentaufnahmedebugger>Agent-Protokollierung aktivieren. Hinweis: Wenn alte Agent-Protokolle beim Sitzungsstart löschen ebenfalls aktiviert ist, löscht jede erfolgreiche Visual Studio-Anfügung vorherige Agent-Protokolle.

Agent-Protokolle finden Sie an den folgenden Speicherorten:

  • App Services:
    • Navigieren Sie zur Kudu-Website Ihres App Service (d. h<. yourappservice>).scm.azurewebsites.net) und navigieren Sie zu Debug Console.
    • Agent-Protokolle werden im folgenden Verzeichnis gespeichert: D:\home\LogFiles\SiteExtensions\DiagnosticsAgentLogs\.
  • VM/VMSS:
    • Melden Sie sich bei Ihrer VM an. Agent-Protokolle werden wie folgt gespeichert: C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<Version>\SnapshotDebuggerAgent*.txt_
  • AKS
    • Navigieren Sie zum folgenden Verzeichnis: /tmp/diag/AgentLogs/*

Aktivieren von Profiler-/Instrumentierungsprotokollen

Instrumentierungsprotokolle finden Sie an den folgenden Speicherorten:

  • App Services:
    • Die Fehlerprotokollierung wird automatisch an D:\Home\LogFiles\eventlog.xmlgesendet, Ereignisse werden mit <Provider Name="Instrumentation Engine" /> oder "Produktionshaltepunkte" gekennzeichnet.
  • VM/VMSS:
    • Melden Sie sich bei Ihrer VM an, und öffnen Sie Ereignisanzeige.
    • Öffnen Sie die folgende Ansicht: Windows-Protokollanwendung>.
    • Filtern Des aktuellen Protokolls nach Ereignisquelle mithilfe von Produktionshaltepunkten oder instrumentierungsmodul.
  • AKS
    • Protokollierung des Instrumentierungsmoduls bei /tmp/diag/log.txt (in DockerFile festgelegt MicrosoftInstrumentationEngine_FileLogPath )
    • ProductionBreakpoint-Protokollierung unter /tmp/diag/shLog.txt

Bekannte Probleme

  • Das Debuggen von Momentaufnahmen mit mehreren Visual Studio-Clients für dieselbe App Service wird derzeit nicht unterstützt.
  • Roslyn IL-Optimierungen werden in ASP.NET Core Projekten nicht vollständig unterstützt. Bei einigen ASP.NET Core Projekten können Sie möglicherweise einige Variablen nicht sehen oder einige Variablen in bedingten Anweisungen verwenden.
  • Spezielle Variablen wie $FUNCTION oder $CALLERkönnen in bedingten Anweisungen oder Protokollpunkten für ASP.NET Core Projekte nicht ausgewertet werden.
  • Das Debuggen von Momentaufnahmen funktioniert nicht für App Services, für die lokales Zwischenspeichern aktiviert ist.
  • API-Apps zum Debuggen von Momentaufnahmen werden derzeit nicht unterstützt.

Websiteerweiterungsupgrade

Das Debuggen von Momentaufnahmen und Application Insights hängen von einem ICorProfiler ab, der in den Websiteprozess geladen wird und während des Upgrades Probleme beim Sperren von Dateien verursacht. Wir empfehlen diesen Prozess, um sicherzustellen, dass es keine Ausfallzeiten an Ihrem Produktionsstandort gibt.

  • Erstellen Sie einen Bereitstellungsslot in Ihrem App Service und stellen Sie Ihre Website im Slot bereit.
  • Tauschen Sie den Slot mit der Produktion aus Cloud Explorer in Visual Studio oder aus dem Azure-Portal aus.
  • Beenden Sie die Slotwebsite. Es dauert einige Sekunden, bis der Standort w3wp.exe Von allen Instanzen entfernt ist.
  • Aktualisieren Sie die Slotwebsiteerweiterung von der Kudu-Website oder dem Azure-Portal (App Service Blatt > Entwicklungstools-Erweiterungsupdate >>).
  • Starten Sie die Slotwebsite. Wir empfehlen, die Website zu besuchen, um sie wieder aufzuwärmen.
  • Tauschen Sie den Slot durch die Produktion aus.

References