Déplacer le pointeur d’exécution pour modifier le flux d’exécution dans le débogueur

Lors du débogage, vous pouvez déplacer manuellement le pointeur d’exécution pour modifier l’instruction suivante qui s’exécutera ensuite. Le déplacement du pointeur est utile pour des situations telles qu’ignorer du code qui contient un bogue connu et constitue une fonctionnalité plus avancée du débogueur.

Changer le flux d’exécution

Lorsque le débogueur est suspendu, une flèche jaune dans la marge du code source ou de la fenêtre Désassemblage marque l’emplacement de l’instruction qui s’exécutera ensuite. Vous pouvez modifier l’instruction suivante qui s’exécutera en déplaçant cette flèche. Vous pouvez ignorer le code ou revenir à une ligne précédente.

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

Si vous souhaitez modifier la prochaine instruction qui sera exécutée, le débogueur doit être en mode pause. Dans la fenêtre Code source ou Désassemblage, faites glisser la flèche jaune vers une autre ligne, ou faites un clic droit sur la ligne à exécuter ensuite et sélectionnez Définir l’instruction suivante.

Le compteur du programme passe directement au nouvel emplacement. Les instructions entre les anciens et les nouveaux points d’exécution ne sont pas exécutées. Mais si vous déplacez le point d’exécution vers l’arrière, les instructions intermédiaires ne sont pas annulées.

Attention

  • Le déplacement de l’instruction suivante vers une autre fonction ou étendue provoque généralement une altération de la pile des appels, ce qui provoque une erreur ou une exception d’exécution. Si vous essayez de déplacer l’instruction suivante vers une autre étendue, le débogueur vous avertit et vous donne la possibilité d’annuler l’opération.
  • Dans Visual Basic, vous ne pouvez pas déplacer l'instruction suivante à une autre portée ou fonction.
  • Dans C++natif, si vous avez activé les contrôles d’exécution, la définition de l’instruction suivante peut provoquer une exception lorsque l’exécution atteint la fin de la méthode.
  • Lorsque Modifier et continuer est activé, Définir l’instruction suivante échoue si vous avez apporté des modifications que Modifier et Continuer ne peuvent pas remapper immédiatement. Cette situation peut se produire, par exemple, si vous avez modifié du code dans un bloc catch. Lorsque cela se produit, un message d’erreur vous indique que l’opération n’est pas prise en charge.
  • Dans le code managé, vous ne pouvez pas déplacer l’instruction suivante si :
    • L'instruction suivante se trouve dans une méthode différente de celle de l'instruction actuelle.
    • Le débogage a été démarré par le débogage juste-à-temps.
    • Un déroulement de la pile des appels est en cours.
    • Une exception System.StackOverflowException ou System.Threading.ThreadAbortException a été levée.