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.
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.
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.
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
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:
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:
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:
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
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"
- La registrazione degli errori viene inviata automaticamente a D:\Home\LogFiles\eventlog.xml, gli eventi sono contrassegnati con
- 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
- Registrazione del motore di strumentazione in /tmp/diag/log.txt (impostata
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
- Debug in Visual Studio
- Eseguire il debug di app live ASP.NET con Snapshot Debugger
- Eseguire il debug di set di scalabilità live ASP.NET Azure Macchine virtuali\Macchine virtuali con Snapshot Debugger
- Eseguire il debug in tempo reale ASP.NET Azure Kubernetes usando snapshot debugger
- Domande frequenti sul debug degli snapshot