Partilhar via


Mover o ponteiro de execução para alterar o fluxo de execução no depurador

Durante a depuração, você pode mover manualmente o ponteiro de execução para alterar a próxima instrução que será executada em seguida. Mover o ponteiro é útil para situações como ignorar código que contém um bug conhecido e é um recurso mais avançado do depurador.

Alterar o fluxo de execução

Com o depurador em pausa, uma seta amarela na margem do código-fonte ou da janela Desmontagem marca o local da instrução que será executada em seguida. Você pode alterar a próxima instrução que será executada movendo essa seta. Você pode ignorar o código ou retornar a uma linha anterior.

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

Se você quiser alterar a próxima instrução que será executada, o depurador deverá estar no modo de interrupção. No código-fonte ou na janela Desmontagem , arraste a seta amarela para uma linha diferente ou clique com o botão direito na linha que você deseja executar em seguida e selecione Definir Próxima Instrução.

O contador do programa vai diretamente para o novo local. As instruções entre os pontos de execução antigos e novos não são executadas. Se você mover o ponto de execução para trás, as instruções intervenientes não serão desfeitas.

Cuidado

  • Mover a instrução seguinte para outra função ou escopo normalmente resulta em danos à pilha de chamadas, causando um erro em runtime ou uma exceção. Se você tentar mover a instrução seguinte para outro escopo, o depurador abrirá uma caixa de diálogo com um aviso e dará uma chance de cancelar a operação.
  • No Visual Basic, você não pode mover a instrução seguinte para outro escopo ou função.
  • No C++ nativo, se as verificações de runtime estiverem ativadas, definir a instrução seguinte poderá gerar uma exceção quando a execução chegar ao final do método.
  • Quando a opção Editar e Continuar estiver habilitada, Definir Próxima Instrução falhará caso você tenha feito edições que Editar e Continuar não é capaz de remapear imediatamente. Essa situação pode ocorrer, por exemplo, se você editou o código dentro de um bloco catch. Quando isso acontece, uma mensagem de erro informa que não há suporte para a operação.
  • No código gerenciado, você não poderá mover a próxima instrução se:
    • A instrução a seguir é um método diferente do que a instrução atual.
    • A depuração foi iniciada com a depuração Just-In-Time.
    • Houver um desenrolamento de pilha de chamada estiver em andamento.
    • Uma exceção System.StackOverflowException ou System.Threading.ThreadAbortException foi lançada.