Поделиться через


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

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

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

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

Анимация, показывающая, как переместить указатель.

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

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

Caution

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