Перемещение указателя выполнения для изменения потока выполнения в отладчике

При отладке можно вручную переместить указатель выполнения, чтобы изменить следующую инструкцию, которая будет выполняться далее. Перемещение указателя полезно для таких ситуаций, как пропуск кода, содержащего известную ошибку, и является более расширенной функцией отладчика.

Изменение потока выполнения

Когда работа отладчика приостановлена, желтая стрелка в поле исходного кода или в окне Дизассемблированный код отмечает расположение оператора, который должен быть выполнен следующим. Вы можете изменить следующий оператор, который будет выполняться, переместив эту стрелку. Можно пропустить код или вернуться к предыдущей строке.

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

Для изменения оператора, который будет выполнен следующим, отладчик должен находиться в режиме приостановки выполнения. В окне исходного кода или окне Дизассемблированный код перетащите желтую стрелку в другую строку или щелкните правой кнопкой мыши строку, которую нужно выполнить следующей, и выберите команду Задать следующий оператор.

Счетчик программы переходит непосредственно к новому расположению. Инструкции между старой и новой точками не выполняются. Однако при перемещении точки выполнения обратно промежуточные инструкции не отменяются.

Внимание

  • Перемещение следующего оператора на другую функцию или область обычно приводит к повреждению стека вызова, вызывая ошибку времени выполнения или исключение. При попытке переместить следующий оператор в другую область отладчик выдаст предупреждение и шанс отменить операцию.
  • В Visual Basic нельзя переместить следующий оператор на другую область или функцию.
  • В машинном коде C++, если включены проверки среды выполнения, установка следующего оператора может вызвать исключение, когда выполнение достигнет конца метода.
  • При включенной операции Изменить и продолжить команда Задать следующий оператор завершится сбоем, если вы внесете изменения, которые операция Изменить и продолжить не сможет немедленно применить. Например, это может произойти, если были внесены изменения внутри блока catch. При возникновении такой ситуации появляется сообщение об ошибке, указывающее, что операция не поддерживается.
  • В управляемом коде невозможно переместить следующую инструкцию, если:
    • Следующий оператор находится в методе, отличном от метода текущего оператора.
    • Отладка была запущена через JIT–отладку.
    • Выполняется очистка стека вызова.
    • Вызвано исключение System.StackOverflowException или System.Threading.ThreadAbortException.