Spostare il puntatore di esecuzione per modificare il flusso di esecuzione nel debugger

Durante il debug, è possibile spostare manualmente il puntatore di esecuzione per modificare l'istruzione successiva che verrà eseguita successivamente. Lo spostamento del puntatore è utile per situazioni come ignorare il codice che contiene un bug noto ed è una funzionalità più avanzata del debugger.

Modificare il flusso di esecuzione

Quando il debugger viene sospeso, una freccia gialla nel margine del codice sorgente o della finestra Disassembly contrassegna la posizione dell'istruzione che verrà eseguita successivamente. È possibile modificare l'istruzione successiva che verrà eseguita spostando questa freccia. È possibile ignorare il codice o tornare a una riga precedente.

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

Se si desidera modificare l'istruzione successiva che verrà eseguita, il debugger deve essere in modalità di interruzione. Nella finestra codice sorgente o Disassembly trascinare la freccia gialla su una riga diversa oppure fare clic con il pulsante destro del mouse sulla riga che si desidera eseguire successivamente e selezionare Imposta istruzione successiva.

Il contatore del programma passa direttamente alla nuova posizione. Le istruzioni tra i punti di esecuzione precedenti e nuovi non vengono eseguite. Tuttavia, se si sposta il punto di esecuzione all'indietro, le istruzioni intermedie non vengono annullate.

Attenzione

  • Lo spostamento dell'istruzione successiva in un'altra funzione o ambito provoca in genere il danneggiamento dello stack di chiamate, causando un errore o un'eccezione di runtime. Se si tenta di spostare l'istruzione successiva in un altro ambito, il debugger fornisce un avviso e la possibilità di annullare l'operazione.
  • In Visual Basic non è possibile spostare l'istruzione successiva in un altro ambito o funzione.
  • In C++ nativo, se sono abilitati i controlli di runtime, l'impostazione dell'istruzione successiva può causare un'eccezione quando l'esecuzione raggiunge la fine del metodo.
  • Quando l'opzione Modifica e continuazione è abilitata, l'impostazione dell'istruzione successiva ha esito negativo se sono state apportate modifiche che Modifica e continuazione non possono eseguire immediatamente il mapping. Questa situazione può verificarsi, ad esempio, se il codice è stato modificato in un blocco catch. In questo caso, un messaggio di errore indica che l'operazione non è supportata.
  • Nel codice gestito non è possibile spostare l'istruzione successiva se:
    • L'istruzione successiva è inclusa in un metodo diverso da quello dell'istruzione corrente.
    • Il debug è stato avviato dal debug JIT.
    • È in corso la rimozione dello stack di chiamate.
    • È stata generata un'eccezione System.StackOverflowException or System.Threading.ThreadAbortException.