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:

Ambienti

Sono supportati i seguenti ambienti:

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

Autorizzazioni

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:

  1. L'applicazione genera TrackException.

  2. Snapshot Debugger monitora le eccezioni man mano che vengono generate sottoscrivendo l'evento AppDomain.CurrentDomain.FirstChanceException.

  3. 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.

  4. L'ID problema dell'evento di eccezione viene calcolato e confrontato con gli ID problema nel piano di raccolta.

  5. 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.

  6. Dopo che è la restituzione del gestore FirstChanceException, l'eccezione generata viene elaborata come di consueto.

  7. 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:

  1. Crea un minidump.

  2. 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.

Vedere gli scenari di esempio in cui è possibile che si verifichi un sovraccarico di 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: