Eseguire il debug di servizi Azure Kubernetes Azure ASP.NET attivi con Snapshot Debugger

Snapshot Debugger crea uno snapshot delle app in produzione quando viene eseguito il codice a cui si è interessati. Per indicare al debugger di creare uno snapshot, impostare punti di ancoraggio e punti di registrazione nel codice. Il debugger consente di vedere esattamente cosa non ha funzionato, senza alcun impatto sul traffico dell'applicazione di produzione. Snapshot Debugger può essere utile per ridurre notevolmente il tempo necessario per risolvere i problemi che si verificano negli ambienti di produzione.

I punti di acquisizione snapshot e i punti di inserimento istruzione di registrazione sono simili ai punti di interruzione, ma a differenza dei punti di interruzione, l'applicazione non viene interrotta al raggiungimento dei punti di acquisizione snapshot. L'acquisizione di uno snapshot in un punto di acquisizione snapshot richiede in genere 10-20 millisecondi.

Questa esercitazione illustra come:

  • Avviare Snapshot Debugger
  • Impostare un punto di acquisizione snapshot e visualizzare uno snapshot
  • Impostare un punto di inserimento istruzione di registrazione

Prerequisiti

  • Snapshot Debugger per servizio Azure Kubernetes è disponibile solo per Visual Studio 2019 Enterprise o versione successiva con il carico di lavoro Sviluppo di Azure. (Nella scheda Singoli componenti in Debug e test>Snapshot Debugger.)

    Se non è già installato, installare Visual Studio 2019 Enterprise.

  • La raccolta di snapshot è disponibile per le app Web dei servizi Azure Kubernetes seguenti:

    • Applicazioni ASP.NET Core in esecuzione in .NET Core 2.2 o versioni successive in Debian 9.

    • Applicazioni ASP.NET Core in esecuzione in .NET Core 2.2 o versioni successive in Alpine 3.8.

    • Applicazioni ASP.NET Core in esecuzione in .NET Core 2.2 o versioni successive in Ubuntu 18.04.

      Nota

      Per facilitare l'abilitazione del supporto per Snapshot Debugger nel servizio Azure Kubernetes, è disponibile un repository che contiene un set di Dockerfile che illustrano la configurazione nelle immagini Docker.

Aprire il progetto e avviare Snapshot Debugger

  1. Aprire il progetto di cui si vuole eseguire il debug di snapshot.

    Importante

    Per eseguire il debug di snapshot, è necessario aprire la stessa versione del codice sorgente pubblicata nel servizio Azure Kubernetes.

  2. Scegliere Debug > Collega snapshot Debugger.... Selezionare la risorsa servizio Azure Kubernetes distribuita nell'app Web e in un account di archiviazione di Azure e quindi fare clic su Connetti. Snapshot Debugger supporta anche app Azure Service e Azure Macchine virtuali (VM) e set di scalabilità di macchine virtuali.

    Launch the snapshot debugger from the Debug menu

    Select Azure Resource

    Nota

    (Visual Studio 2019 versione 16.2 e successive) Snapshot Debugger ha abilitato il supporto cloud di Azure. Assicurarsi che sia la risorsa di Azure che l'account Archiviazione di Azure selezionato si trovino nello stesso cloud. Contattare l'amministratore di Azure se si hanno domande sulle configurazioni di conformità di Azure dell'organizzazione.

Visual Studio è ora in modalità debug di snapshot.

Snapshot debugging mode

La finestra Moduli mostra quando tutti i moduli sono stati caricati per il servizio app Azure (scegliere Debug > moduli Windows > per aprire questa finestra).

Check the Modules window

Impostare un punto di acquisizione snapshot

  1. Nell'editor di codice fare clic sulla barra sinistra accanto a una riga di codice a cui si è interessati per impostare un punto di ancoraggio. Assicurarsi che sia il codice che si sa che verrà eseguito.

    Set a snappoint

  2. Fare clic su Avvia raccolta per attivare il punto di acquisizione snapshot.

    Turn on the snappoint

    Suggerimento

    Non è possibile eseguire il codice passaggio per passaggio quando si visualizza uno snapshot, ma è possibile inserire più punti di acquisizione snapshot nel codice per seguire l'esecuzione in corrispondenza di righe diverse del codice. Se il codice include più punti di acquisizione snapshot, Snapshot Debugger si assicura che gli snapshot corrispondenti provengano dalla stessa sessione dell'utente finale. Snapshot Debugger esegue questa verifica anche se l'app è usata da molti utenti.

Acquisisci un'istantanea

Dopo aver impostato un punto di ancoraggio, è possibile generare manualmente uno snapshot passando alla visualizzazione del browser del sito Web ed eseguendo la riga di codice contrassegnata o attendere che gli utenti generino uno dal relativo utilizzo del sito.

Esaminare i dati dello snapshot

  1. Quando viene raggiunto il punto di acquisizione snapshot, nella finestra Strumenti di diagnostica viene visualizzato uno snapshot. Per aprire questa finestra, scegliere Debug di Windows Show Diagnostic Tools .To open this window, choose Debug > Windows > Show Diagnostic Tools.

    Open a snappoint

  2. Fare doppio clic sul punto di acquisizione snapshot per aprire lo snapshot nell'editor del codice.

    Inspect snapshot data

    Da questa visualizzazione, è possibile passare il mouse sulle variabili per visualizzare i suggerimenti dati, usare le finestre Variabili locali, Espressioni di controllo e Stack di chiamate e anche valutare le espressioni.

    Il sito Web stesso è ancora attivo e gli utenti finali non sono interessati. Viene acquisito un solo snapshot per ogni punto di acquisizione snapshot per impostazione predefinita. Dopo l'acquisizione, il punto di acquisizione snapshot viene disattivato. Se si vuole acquisire un altro snapshot in corrispondenza del punto di acquisizione snapshot, è possibile riattivare il punto di acquisizione snapshot facendo clic su Aggiorna raccolta.

È anche possibile aggiungere ulteriori punti di acquisizione snapshot all'app e attivarli con il pulsante Aggiorna raccolta.

Hai bisogno di assistenza? Vedere le pagine Risoluzione dei problemi e problemi noti e Domande frequenti sul debug di snapshot.

Impostare un punto di acquisizione snapshot condizionale

Se è difficile ricreare uno stato specifico nell'app, è consigliabile usare un punto di ancoraggio condizionale. I punti di ancoraggio condizionali consentono di controllare quando creare uno snapshot, ad esempio quando una variabile contiene un valore specifico da controllare. È possibile impostare le condizioni usando espressioni, filtri o numeri di passaggi.

Per creare un punto di acquisizione snapshot condizionale

  1. Fare clic con il pulsante destro del mouse su un'icona del punto di ancoraggio (sfera vuota) e scegliere Impostazioni.

    Choose Settings

  2. Digitare un'espressione nella finestra Impostazioni punto di acquisizione snapshot.

    Type an expression

    Nella figura precedente lo snapshot viene acquisito per il punto di acquisizione snapshot solo quando visitor.FirstName == "Dan".

Impostare un punto di inserimento istruzione di registrazione

Oltre ad acquisire uno snapshot quando viene raggiunto un punto di acquisizione snapshot, è anche possibile configurare un punto di acquisizione snapshot per la registrazione di un messaggio, ovvero per creare un punto di inserimento istruzione di registrazione. È possibile impostare punti di inserimento istruzione di registrazione senza dover ridistribuire l'app. I punti di inserimento istruzione di registrazione vengono eseguiti in modo virtuale senza impatto o effetti collaterali sull'applicazione in esecuzione.

Per creare un punto di inserimento istruzione di registrazione

  1. Fare clic con il pulsante destro del mouse su un'icona di punto di acquisizione snapshot (esagono blu) e scegliere Impostazioni.

  2. Selezionare Azioni nella finestra Impostazioni punto di acquisizione snapshot.

    Create a logpoint

  3. Nel campo Messaggio è possibile immettere il nuovo messaggio di log che si vuole registrare. È anche possibile valutare le variabili nel messaggio di log, racchiudendole all'interno di parentesi graffe.

    Se si sceglie Invia alla finestra di output, quando viene raggiunto il punto di inserimento istruzione di registrazione, il messaggio viene visualizzato nella finestra Strumenti di diagnostica.

    Logpoint data in the Diagnostic Tools window

    Se si sceglie Invia al log applicazioni, quando viene raggiunto il punto di inserimento istruzione di registrazione, il messaggio viene visualizzato ovunque sia possibile vedere i messaggi da System.Diagnostics.Trace (o ILogger in .NET Core), ad esempio App Insights.

In questa esercitazione si è appreso come usare Snapshot Debugger per Kubernetes di Azure. Sono disponibili altre informazioni su questa funzionalità.