2

Для демонстрации взгляните на following section of this video.Перемещение указателя инструкции назад при отладке в Visual Studio

В принципе, я знаю, что это возможно в Visual Studio Community Edition 2015. Мне было интересно:

а) Является ли это связано с IntelliTrace и "Historic отладки"? б) Будет ли побочный эффект, когда я это сделаю? Или это просто переводит инструкции назад и все?

+0

Он просто перемещает указатель инструкции. Конечно, могут быть побочные эффекты, вы можете случайно пропустить требуемый код, который не отображается в вашем источнике. Хорошим примером является [доступно здесь] (http://stackoverflow.com/questions/28896531/clr-system-nullreferenceexception-when-forcing-set-next-statement-into-if-bl). –

ответ

2

Он просто перемещает указатель инструкции назад и все, чтобы использовать свои собственные слова.

Это означает, что:

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

Таким образом, вы можете использовать эту отладочную помощь либо заставить программу взять путь, которого она не сделала (например, перетащив указатель инструкции внутри пропущенного оператора if), чтобы пропустить (путем перетаскивания указателя инструкции мимо какого-либо кода, который вы не хотите выполнять), или для повторного запуска некоторого кода.

Но вы должны знать об указанных ограничениях. Если код не безопасен для повторного запуска, то выполнение этого, скорее всего, не поможет вам отладить.

+0

Спасибо! Является ли это рекомендуемой практикой? Я не смог найти что-либо об этой функциональности, в том числе когда/когда ее не использовать. – anemaria20

+1

«Рекомендуемая практика» звучит как что-то, что я бы рекомендовал вам делать все время, и это не одна из этих функций. Однако вам обязательно нужно научиться использовать эту функцию, что она может и чего не может сделать, поскольку иногда у вас нет другого варианта, кроме как повторить или пропустить какой-либо код. Если, например, потребуется 2-3 минуты, чтобы перезапустить всю программу, чтобы вернуться к точке, где попала ваша точка останова, а затем вы шаг за шагом слишком далеко, прежде чем вы начнете «входить в» код, тогда я бы просто просто перетащите указатель назад и нажмите F11, чтобы войти в него. –

+0

Спасибо! Как продвигаться вперед? Я видел, что это возможно. Если он работает так же, как и наоборот, я могу представить, что это похоже на утверждение goto. – anemaria20

0

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

Существует никаких РЕАЛЬНЫХ последствий, если вы не обрабатываете что-либо или не сохраняете в базе данных и т. Д., Так как запись одних и тех же существующих данных может вызвать исключение или беспорядок при обработке некоторых данных.

Все переменные, которые были установлены (даже если вы перетаскиваете курсор выше, чем они инициализируются), сохраняют значение, которое они имели с места, которое вы перетащили курсором вверх.