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