Eseguire il debug di eccezioni nelle applicazioni .NET usando Snapshot Debugger
Se abilitato, Snapshot Debugger raccoglie automaticamente uno snapshot di debug del codice sorgente e delle variabili quando si verifica un'eccezione nell'applicazione .NET attiva. Snapshot Debugger di Application Insights:
- Monitora i log generati dal sistema dall'app Web.
- Raccoglie gli snapshot sulle eccezioni che generano in primo piano.
- Fornisce informazioni necessarie per diagnosticare i problemi nell'ambiente di produzione.
Altre informazioni sui processi Snapshot Debugger e Snapshot Uploader.
Applicazioni e ambienti supportati
Questa sezione elenca le applicazioni e gli ambienti supportati.
Applicazioni
La raccolta di snapshot è disponibile per:
- .NET Framework 4.6.2 e versioni successive.
- .NET 6.0 o versione successiva in Windows.
Ambienti
Sono supportati i seguenti ambienti:
- Servizio app di Azure
- Funzioni di Azure
- Servizi cloud di Azure in esecuzione nella famiglia del sistema operativo 4 o versione successiva
- Azure Service Fabric in esecuzione su Windows Server 2012 R2 o versione successiva
- Macchine virtuali di Azure e set di scalabilità di macchine virtuali di Azure che eseguono Windows Server 2012 R2 o versione successiva
- Macchine fisiche o virtuali locali in esecuzione su Windows Server 2012 R2 o versione successiva o Windows 8.1 o versione successiva
Nota
Le applicazioni client (ad esempio, WPF, Windows Forms o piattaforma UWP) non sono supportate.
Prerequisiti per l'uso di Snapshot Debugger
Pacchetti e configurazioni
- Includere il pacchetto NuGet di Snapshot Collector nell'applicazione.
- Configurare i parametri della raccolta in
ApplicationInsights.config
.
Autorizzazioni
- Verificare di essere stati aggiunti al ruolo Snapshot Debugger di Application Insights per lo snapshot di Application Insights di destinazione.
Come funziona Snapshot Debugger
Snapshot Debugger viene implementato come un processore di Application Insights Telemetry. Quando l'applicazione viene eseguita, il processore di telemetria Snapshot Debugger viene aggiunto alla pipeline dei log generati dal sistema dell'applicazione.
Importante
Gli snapshot possono contenere dati personali o altre informazioni riservate nei valori delle variabili e dei parametri. I dati snapshot vengono archiviati nella stessa area della risorsa di Application Insights.
Processo di Snapshot Debugger
Il processo Snapshot Debugger viene avviato e termina con il metodo TrackException
. Uno snapshot del processo è un clone sospeso del processo in esecuzione, in modo che gli utenti non verifichino interruzioni minime. In uno scenario tipico:
L'applicazione genera
TrackException
.Snapshot Debugger monitora le eccezioni man mano che vengono generate sottoscrivendo l'evento
AppDomain.CurrentDomain.FirstChanceException
.Un contatore viene incrementato per l'ID problema.
- Quando il contatore raggiunge il valore
ThresholdForSnapshotting
, l'ID problema viene aggiunto a un piano di raccolta.
Nota
Il valore minimo predefinito
ThresholdForSnapshotting
è 1. Con questo valore, l'app deve attivare la stessa eccezione due volte prima che venga creato uno snapshot.- Quando il contatore raggiunge il valore
L'ID problema dell'evento di eccezione viene calcolato e confrontato con gli ID problema nel piano di raccolta.
Se esiste una corrispondenza tra gli ID problema, viene creato uno snapshot del processo in esecuzione.
- Allo snapshot viene assegnato un identificatore univoco e l'eccezione viene contrassegnata con tale identificatore.
Nota
La frequenza di creazione dello snapshot è limitata dall'impostazione
SnapshotsPerTenMinutesLimit
. Per impostazione predefinita, il limite è uno snapshot ogni 10 minuti.Dopo che è la restituzione del gestore
FirstChanceException
, l'eccezione generata viene elaborata come di consueto.L'eccezione raggiunge di nuovo il
TrackException
metodo e viene segnalata ad Application Insights, insieme all'identificatore dello snapshot.
Nota
Impostare IsEnabledInDeveloperMode
su true
se si desidera generare snapshot durante il debug in Visual Studio.
Processo Snapshot Uploader
Mentre il processo Snapshot Debugger continua a essere eseguito e gestisce il traffico agli utenti con poca interruzione, lo snapshot viene passato al processo Snapshot Uploader. In uno scenario tipico, lo Snapshot Uploader:
Crea un minidump.
Carica il minidump in Application Insights, insieme a tutti i file di simboli pertinenti (.pdb).
Nota
Non è possibile caricare più di 50 snapshot al giorno.
Se Snapshot Debugger è stato abilitato ma non vengono visualizzati gli snapshot, vedere la Guida alla risoluzione dei problemi.
Aggiornamento Snapshot Debugger
Snapshot Debugger esegue l'aggiornamento automatico tramite l'estensione del sito di Application Insights preinstallata predefinita.
L'aggiunta manuale di un'estensione del sito di Application Insights per mantenere aggiornato Snapshot Debugger è deprecata.
Costi generali
Snapshot Debugger è progettato per l'uso in ambienti di produzione. Le impostazioni predefinite includono limiti di frequenza per ridurre al minimo l'impatto sulle applicazioni.
Tuttavia, è possibile che si verifichi un sovraccarico di CPU, memoria e I/O ridotto associato a Snapshot Debugger, ad esempio:
- Quando viene generata un'eccezione nell'applicazione
- Se il gestore delle eccezioni decide di creare uno snapshot
- Quando
TrackException
viene chiamato
Non sono previsti costi aggiuntivi per l'archiviazione dei dati acquisiti da Snapshot Debugger.
Limiti
In questa sezione vengono illustrate le limitazioni per Snapshot Debugger.
Conservazione dei dati
Gli snapshot di debug vengono archiviati per 15 giorni. I criteri di conservazione dei dati predefiniti sono impostati per ogni singola applicazione. Se è necessario aumentare questo valore, è possibile richiedere un aumento aprendo un caso di supporto nel portale di Azure. Per ogni istanza di Application Insights, è consentito un numero massimo di 50 snapshot al giorno.
Pubblicare i simboli
Snapshot Debugger richiede file di simboli nel server di produzione per:
- Decodificare le variabili
- Offrire un'esperienza di debug in Visual Studio
Per impostazione predefinita, la versione 2017 di Visual Studio 15.2+ pubblica i simboli per le build di versione durante la pubblicazione nel Servizio app.
Nelle versioni precedenti è necessario aggiungere la riga seguente al file
.pubxml
del profilo di pubblicazione per pubblicare i simboli in modalità versione:<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Per Calcolo di Azure e altri tipi, assicurarsi che i file di simboli siano i seguenti:
- Nella stessa cartella dell'applicazione principale
.dll
(in genere,wwwroot/bin
) o - Disponibile nel percorso corrente.
Per altre informazioni sulle differenti opzioni di simboli disponibili, vedere la documentazione di Visual Studio. Per ottenere risultati ottimali, è consigliabile usare Pieno, Portabileo Integrato.
Compilazioni ottimizzate
In alcuni casi, le variabili locali non possono essere visualizzate nelle build di versione a causa delle ottimizzazioni applicate dal compilatore JIT.
Tuttavia, in Servizi app, Snapshot Debugger è in grado di de-ottimizzare generando metodi che fanno parte del relativo piano di raccolta.
Suggerimento
Installare l'estensione del sito Application Insights nell'istanza del Servizio app per ottenere supporto per la de-ottimizzazione.
Passaggi successivi
Abilitare Snapshot Debugger di Application Insights per l'applicazione: