Concetti relativi all'agente del debugger

L'agente del debugger è un assistente al debug basato su intelligenza artificiale che funziona tramite GitHub Copilot Chat per facilitare la riproduzione, l'isolamento e la correzione di bug controllando l'esecuzione e convalidando il lavoro sullo stato di runtime in tempo reale. L'agente dà il meglio di sé quando gli dai un obiettivo chiaro e gli permetti di gestire il processo di debug dall'inizio alla fine.

L'agente del debugger è ideale negli scenari in cui è necessario dimostrare che esiste un bug, verificare che una correzione funzioni, instrumentare il codice con punti di interruzione e punti di analisi e analizzare stack di chiamate complessi. Combinando le richieste in linguaggio naturale con il controllo del debugger, puoi muoverti lungo i flussi di lavoro di riproduzione, strumentazione, isolamento e correzione in modo più efficiente rispetto al solo debug manuale.

Come accedere all'agente del debugger

  1. Aprire la finestra di Copilot Chat (Visualizza>Copilot Chat GitHub).

  2. Selezionare Debugger dal menu a discesa della modalità in basso a sinistra nella finestra della chat oppure digitare @debugger nel campo di input della chat quando si è in modalità Agent.

  3. Immettere un prompt che descrive l'attività di debug, sostituendo il testo segnaposto con le specifiche dello scenario.

Riproduzione e diagnosi dei bug

L'agente del debugger può riprodurre bug dalle descrizioni dei problemi e verificare che esistano nell'ambiente di runtime. Iniziate indirizzando l'agente a una descrizione di bug, a un link a un problema GitHub o a un bug di Azure DevOps, e lasciategli gestire l'intero ciclo.

Prompt di esempio:

Investigate/fix/debug the bug described in <issue link>. Reproduce the failure, find the root cause with the debugger, and propose a fix.

When I <do these steps>, I expect <expected result> but instead I see <actual result>. Debug the problem, find where the code goes wrong, and suggest a fix.

Create a minimal repro for the following issue, then run it under the debugger to confirm the failure and show me the runtime state that causes it: <bug description>.

Correzione della verifica e della convalida

Una volta ottenuta una correzione, sia che sia stata creata dall'agente sia da te, usa l'Agente debugger per verificare che la correzione risolva il problema e che vengano eseguiti tutti i percorsi di codice significativi.

Prompt di esempio:

Dai all'agente un modo autosufficiente per dimostrare che la correzione funziona, ad esempio con un test unitario o un piccolo programma di riproduzione da console, quindi fagli verificare uno specifico comportamento a runtime.

Set breakpoints at <specific locations>, debug, and verify that <variable> has the value <expected value> and that <behavior> happens as expected.

I'm working on a change to make my code handle <new feature>. As part of that, I broke the following scenario: <repro steps>. Debug the problem and find where my code went wrong. Here are my changes: <paste diff here>

Strumentazione e ispezione in fase di esecuzione

L'agente del debugger può impostare punti di interruzione condizionali e punti di traccia esattamente dove sono necessari, quindi eseguire il progetto per raccogliere i dati necessari. Questo approccio offre maggiore visibilità senza modificare manualmente il codice.

Prompt di esempio:

Set a breakpoint at the start of ProcessFile that breaks only when the file name starts with "data12345", then launch my project.

I need more visibility into <area of code>. Add tracepoints that log <the values you care about> at the key points in this flow, then run my project and show me the trace output.

Analisi dello stack di chiamate e flusso di controllo

Quando si è sospesi in corrispondenza di un punto di interruzione o di un'eccezione ed è necessario comprendere il percorso di esecuzione, l'agente del debugger può analizzare lo stack di chiamate e spiegare le operazioni eseguite dal thread corrente, incluso il flusso asincrono.

Prompt di esempio:

Analyze the current call stack and explain what this thread is doing and how it got here, including the async flow. Point out the frame most likely responsible for <the problem>.

Why is my code taking the wrong branch and not reaching <this line>? Set a breakpoint there and run the app. If it isn't hit, set breakpoints at the upstream decision points and inspect the actual condition values to find where control flow diverges.

Tip

È anche possibile ottenere l'analisi dello stack di chiamate con un clic: nella finestra Stack di chiamate selezionare Analizza con Copilot oppure usare Analizza con Copilot nella visualizzazione Thread in stack paralleli / per scenari multithreading.

Debug dei test unitari

L'agente del debugger può eseguire il debug dei test non superati direttamente dalla chat senza dover prima avviare il debugger.

Richiesta di esempio:

The test <TestName> is failing. Debug it, find the root cause of the failure, and suggest a fix.

Tip

È anche possibile avviare il debug di un test non riuscito da Esplora test o dall'indicatore CodeLens sopra il test nell'editor, quindi continuare la conversazione con l'agente del debugger da questa posizione. Questo è un modo semplice per passare a Copilot il contesto del test fallito.

Procedure consigliate per l'agente del debugger

  • Specificare i dati, non i comandi. L'agente del debugger non ha accesso alla shell o a PowerShell, quindi non può eseguire strumenti come git.exe per l'utente. Incollare invece l'output effettivo. Ad esempio, incollare il testo di una diff anziché indicare all'agente di eseguire un comando diff.

  • Lasciare che l'agente controlli l'esecuzione quando instrumenta il codice. Copilot può correggere gli errori nei punti di interruzione condizionali e nei punti di traccia solo quando controlla l'esecuzione. Preferisci "impostare un punto di interruzione condizionale... ed eseguire il mio progetto" piuttosto che "impostare un punto di interruzione condizionale" da solo.

  • Consentire all'agente di completare l'attività quando entra nello stato di pausa. Se l'agente gestisce l'esecuzione e la chat mostra ancora Copilot in funzione, non è necessario fare nulla. Per riprendere il controllo, selezionare il pulsante Arresta nella chat.