Risoluzione dei problemi e problemi noti per il debug di snapshot in Visual Studio

Si applica a: Visual Studio

Questo articolo fornisce soluzioni ai problemi comuni che possono verificarsi quando si esegue il debug di un'app di Azure con Snapshot Debugger in Visual Studio.

Se la procedura descritta in questo articolo non risolve il problema, cercare il problema in Developer Community o segnalare un nuovo problema scegliendo Guida>Invia commenti e suggerimenti>segnala un problema in Visual Studio.

Problema: "Attach Snapshot Debugger" rileva un errore di codice di stato HTTP

Se viene visualizzato l'errore seguente nella finestra Output durante il tentativo di collegamento, potrebbe trattarsi di un problema noto elencato nelle sezioni seguenti. Provare le soluzioni proposte e, se il problema persiste, contattare l'alias precedente.

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

(401) Non autorizzato

Questo errore indica che la chiamata REST eseguita da Visual Studio ad Azure usa credenziali non valide.

Seguire questa procedura:

  • Assicurarsi che l'account di personalizzazione di Visual Studio disponga delle autorizzazioni per la sottoscrizione e la risorsa di Azure a cui si sta collegando. Un modo rapido per determinarlo consiste nel verificare se la risorsa è disponibile nella finestra di dialogo da Debug>Attach Snapshot Debugger...>Risorsa di> AzureSelezionare Esistente o in Cloud Explorer.
  • Se questo errore continua a essere persistente, usare uno dei canali di feedback descritti all'inizio di questo articolo.

Se è stata abilitata l'autenticazione/autorizzazione (EasyAuth) nel servizio app, potrebbe verificarsi un errore 401 con LaunchAgentAsync nel messaggio di errore dello stack di chiamate. Assicurarsi che l'opzione Azione da eseguire quando la richiesta non viene autenticata sia impostata su Consenti richieste anonime (nessuna azione) nel portale di Azure e fornire un authorization.json in D:\Home\sites\wwwroot con il contenuto seguente.

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

La prima route protegge in modo efficace il dominio dell'app in modo simile all'accesso con [IdentityProvider]. La seconda route espone l'endpoint SnapshotDebugger AgentLaunch all'esterno dell'autenticazione, che esegue l'azione predefinita di avvio dell'agente di diagnostica SnapshotDebugger solo se l'estensione del sito preinstallato SnapshotDebugger è abilitata per il servizio app. Per altre informazioni sulla configurazione authorization.json , vedere Regole di autorizzazione URL.

(403) Non consentito

L'errore 403 - Non consentito indica che l'autorizzazione è negata. Questo errore può essere causato da molti scenari diversi.

Seguire questa procedura:

  • Verificare che l'account di Visual Studio disponga di una sottoscrizione di Azure valida con le autorizzazioni necessarie Role-Based Controllo di accesso (controllo degli accessi in base al ruolo) per la risorsa. Per AppService, controllare se si dispone delle autorizzazioni per eseguire query sul piano servizio app che ospita l'app.
  • Verificare che il timestamp del computer client sia corretto e aggiornato. I server con timestamp disattivati di più di 15 minuti del timestamp della richiesta generano in genere questo errore.
  • Se questo errore continua a essere persistente, usare uno dei canali di feedback descritti all'inizio di questo articolo.

(404) Non trovato

L'errore 404 - Non trovato indica che il sito Web non è stato trovato nel server.

Seguire questa procedura:

  • Verificare di avere un sito Web distribuito ed in esecuzione nella risorsa servizio app a cui ci si sta collegando.
  • Verificare che il sito sia disponibile in https://< resource.azurewebsites.net>
  • Verificare che l'applicazione Web personalizzata in esecuzione correttamente non restituisca un codice di stato 404 quando si accede all'indirizzo https://< resource.azurewebsites.net>.
  • Se questo errore continua a essere persistente, usare uno dei canali di feedback descritti all'inizio di questo articolo.

(406) Non accettabile

L'errore 406 - Non accettabile indica che il server non è in grado di rispondere al tipo impostato nell'intestazione Accept della richiesta.

Seguire questa procedura:

  • Verificare che il sito sia disponibile in https://< resource.azurewebsites.net>.
  • Verificare che il sito non sia stato migrato a nuove istanze. Snapshot Debugger usa il concetto di ARRAffinity per il routing delle richieste a istanze specifiche che possono generare questo errore in modo intermittente.
  • Se questo errore continua a essere persistente, usare uno dei canali di feedback descritti all'inizio di questo articolo.

(409) Conflitto

L'errore 409 - Conflitto indica che la richiesta è in conflitto con lo stato del server corrente.

Si tratta di un problema noto che si verifica quando un utente tenta di collegare Snapshot Debugger a un AppService che ha abilitato ApplicationInsights. ApplicationInsights imposta AppSettings con una combinazione di maiuscole e minuscole diversa rispetto a Visual Studio, causando questo problema.

Questo problema è stato risolto in Visual Studio 2019.

Seguire questa procedura:

  • Se questo errore continua a essere persistente, usare uno dei canali di feedback descritti all'inizio di questo articolo.

(500) Errore interno del server

L'errore 500 - Errore interno del server indica che il sito è inattivo o che il server non è in grado di gestire la richiesta. Snapshot Debugger funziona solo nelle applicazioni in esecuzione. Application Insights Snapshot Debugger fornisce snapshot sulle eccezioni e può essere lo strumento migliore per le proprie esigenze.

(502) Gateway non valido

L'errore 502 - Gateway non valido indica un problema di rete sul lato server e può essere temporaneo.

Seguire questa procedura:

  • Provare ad attendere alcuni minuti prima di collegare di nuovo Snapshot Debugger.
  • Se questo errore continua a essere persistente, usare uno dei canali di feedback descritti all'inizio di questo articolo.

Problema: Snappoint non è attivato

Se viene visualizzata un'icona di avviso con il punto di ancoraggio anziché l'icona del punto di ancoraggio normale, il punto di ancoraggio non è attivato.

Screenshot che mostra che Snappoint non si attiva.

Seguire questa procedura:

  • Assicurarsi di usare la stessa versione del codice sorgente per compilare e distribuire l'app.
  • Assicurarsi di caricare i simboli corretti per la distribuzione.
  • A tale scopo, visualizzare la finestra Moduli durante il debug dello snapshot e verificare che nella colonna File di simboli sia visualizzato un file con estensione pdb caricato per il modulo di cui si sta eseguendo il debug.
    • Snapshot Debugger tenterà di scaricare e usare automaticamente i simboli per la distribuzione.

Problema: i simboli non si caricano quando si apre uno snapshot

Se viene visualizzata la finestra seguente, i simboli non sono stati caricati.

Screenshot che mostra che i simboli non vengono caricati.

Seguire questa procedura:

  • Selezionare Modifica impostazioni simbolo nella pagina.

  • Nelle impostazioni del simbolo di debug > aggiungere una directory della cache dei simboli.

  • Riavviare il debug dello snapshot dopo aver impostato il percorso del simbolo.

    I simboli, o file con estensione pdb, disponibili nel progetto devono corrispondere alla distribuzione servizio app. La maggior parte delle distribuzioni (distribuzione tramite Visual Studio, CI/CD con Azure Pipelines o Kudu e così via) pubblica i file di simboli nella servizio app. L'impostazione della directory della cache dei simboli consente a Visual Studio di usare questi simboli.

    Screenshot che mostra le impostazioni per i simboli.

  • In alternativa, se l'organizzazione usa un server di simboli o elimina i simboli in un percorso diverso, usare le impostazioni dei simboli per caricare i simboli corretti per la distribuzione.

Problema: non è possibile visualizzare l'opzione "Attach Snapshot Debugger" in Cloud Explorer

Seguire questa procedura:

  • Verificare che il componente Snapshot Debugger sia installato. Aprire il Programma di installazione di Visual Studio e controllare il componente Snapshot Debugger nel carico di lavoro di Azure.

  • Per Visual Studio 2019 o versioni successive, verificare che l'app sia supportata:

    • app Azure Services : ASP.NET applicazioni in esecuzione in .NET Framework 4.6.1 o versioni successive.
    • app Azure Services : ASP.NET Core applicazioni in esecuzione in .NET Core 2.0 o versioni successive in Windows.
    • Azure Macchine virtuali (e set di scalabilità di macchine virtuali): ASP.NET applicazioni in esecuzione in .NET Framework 4.6.1 o versioni successive.
    • Azure Macchine virtuali (e set di scalabilità di macchine virtuali): ASP.NET Core applicazioni in esecuzione in .NET Core 2.0 o versioni successive in Windows.
    • Servizi Azure Kubernetes: ASP.NET Core applicazioni in esecuzione in .NET Core 2.2 o versioni successive in Debian 9.
    • Servizi Azure Kubernetes: ASP.NET Core applicazioni in esecuzione in .NET Core 2.2 o versioni successive in Alpine 3.8.
    • Servizi Azure Kubernetes: ASP.NET Core applicazioni in esecuzione in .NET Core 2.2 o versioni successive in Ubuntu 18.04.

Problema: gli snapshot limitati vengono visualizzati solo negli strumenti di diagnostica

Screenshot che mostra il punto di snap limitato.

Seguire questa procedura:

  • Gli snapshot richiedono poca memoria, ma hanno un addebito per il commit. Se snapshot debugger rileva che il server è sottoposto a un carico elevato di memoria, non verranno creati snapshot. È possibile eliminare gli snapshot già acquisiti arrestando la sessione snapshot debugger e riprovando.

Problema: il debug degli snapshot con più versioni di Visual Studio genera errori (Visual Studio 2019 o versioni successive)

Visual Studio 2019 richiede una versione più recente dell'estensione del sito Snapshot Debugger nel Servizio app di Azure. Questa versione non è compatibile con la versione precedente dell'estensione del sito Snapshot Debugger usata da Visual Studio 2017. Se si tenta di collegare snapshot debugger in Visual Studio 2019 a un Servizio app di Azure di cui è stato eseguito il debug in precedenza da Snapshot Debugger in Visual Studio 2017, verrà visualizzato l'errore seguente:

Screenshot dell'estensione del sito Snapshot Debugger incompatibile Visual Studio 2019.

Viceversa, se si usa Visual Studio 2017 per collegare il debugger snapshot a un Servizio app di Azure di cui è stato eseguito il debug in precedenza da Snapshot Debugger in Visual Studio 2019, verrà visualizzato l'errore seguente:

Screenshot dell'estensione del sito Snapshot Debugger incompatibile Visual Studio 2017.

Per risolvere il problema, eliminare le impostazioni dell'app seguenti nel portale di Azure e collegare nuovamente snapshot debugger:

  • INSTRUMENTATIONENGINE_EXTENSION_VERSION
  • SNAPSHOTDEBUGGER_EXTENSION_VERSION

Problema: si sta collegando alla risorsa o all'account di archiviazione di Azure errato o precedente

Seguire questa procedura:

Le voci "Risorsa di Azure" e "Account di archiviazione" usano i nomi delle risorse come chiavi in modo che azioni come la migrazione di una risorsa a sottoscrizioni diverse possano causare problemi. Per cancellare l'elenco, seguire questa procedura:

  1. Eseguire questi comandi nel prompt dei comandi per sviluppatori per Visual Studio (con privilegi di amministratore).

    vsregedit remove local HKCU SnapshotDebugger AzureResourcesMRU
    vsregedit remove local HKCU SnapshotDebugger StorageAccountsMRU
    
  2. Eliminare tutti i file con estensione suo associati all'app Web.

Problema: si verificano problemi durante il debug degli snapshot ed è necessario abilitare più registrazione

Abilitare i log dell'agente

Per abilitare e disabilitare la registrazione degli agenti, aprire Visual Studio e passare a Opzioni>strumenti>Snapshot Debugger>Abilita registrazione agente. Si noti che se è abilitata anche l'opzione Elimina i log degli agenti precedenti all'avvio della sessione , ogni collegamento di Visual Studio con esito positivo eliminerà i log dell'agente precedenti.

È possibile trovare i log degli agenti nei percorsi seguenti:

  • Servizi app:
    • Passare al sito Kudu del servizio app, <ovvero all'appservizio>.scm.azurewebsites.net) e passare a Console di debug.
    • I log dell'agente vengono archiviati nella directory seguente: D:\home\LogFiles\SiteExtensions\DiagnosticsAgentLogs\.
  • VM/VMSS:
    • Accedere alla macchina virtuale, i log degli agenti vengono archiviati come segue: C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<Version>\SnapshotDebuggerAgent*.txt_
  • AKS
    • Passare alla directory seguente: /tmp/diag/AgentLogs/*

Abilitare i log di profiler/strumentazione

I log di strumentazione sono disponibili nelle posizioni seguenti:

  • Servizi app:
    • La registrazione degli errori viene inviata automaticamente a D:\Home\LogFiles\eventlog.xml, gli eventi sono contrassegnati con <Provider Name="Instrumentation Engine" /> o "Punti di interruzione di produzione"
  • VM/VMSS:
    • Accedere alla macchina virtuale e aprire Visualizzatore eventi.
    • Aprire la visualizzazione seguente: Applicazione log di>Windows.
    • Filtrare il log corrente in base all'origine evento usando i punti di interruzione di produzione o ilmotore di strumentazione.
  • AKS
    • Registrazione del motore di strumentazione in /tmp/diag/log.txt (impostata MicrosoftInstrumentationEngine_FileLogPath in DockerFile)
    • Registrazione di ProductionBreakpoint in /tmp/diag/shLog.txt

Problemi noti

  • Il debug degli snapshot con più client di Visual Studio nello stesso servizio app non è attualmente supportato.
  • Le ottimizzazioni di Roslyn IL non sono completamente supportate nei progetti ASP.NET Core. Per alcuni progetti ASP.NET Core, potrebbe non essere possibile visualizzare alcune variabili o usare alcune variabili nelle istruzioni condizionali.
  • Le variabili speciali, ad $FUNCTION esempio o $CALLER, non possono essere valutate in istruzioni condizionali o punti di log per ASP.NET Core progetti.
  • Il debug degli snapshot non funziona nei servizi app in cui è attivata la memorizzazione nella cache locale .
  • Le app per le API di debug degli snapshot non sono attualmente supportate.

Aggiornamento dell'estensione del sito

Il debug dello snapshot e Application Insights dipendono da un ICorProfiler, che viene caricato nel processo del sito e causa problemi di blocco dei file durante l'aggiornamento. È consigliabile questo processo per garantire che non ci siano tempi di inattività per il sito di produzione.

  • Creare uno slot di distribuzione all'interno del servizio app e distribuire il sito nello slot.
  • Scambiare lo slot con l'ambiente di produzione da Cloud Explorer in Visual Studio o dal portale di Azure.
  • Arrestare il sito slot. L'interruzione del processo diw3wp.exe del sito da tutte le istanze richiede alcuni secondi.
  • Aggiornare l'estensione del sito slot dal sito Kudu o dalla portale di Azure (servizio app aggiornamento delle estensioni > degli strumenti > di sviluppo del pannello>).
  • Avviare il sito slot. È consigliabile visitare il sito per riscaldarlo di nuovo.
  • Scambiare lo slot con l'ambiente di produzione.

Riferimenti