Когда я отлаживаю программу C# и получаю исключение (либо вызываемое кодом, либо созданное фреймворком), IDE останавливается и переводит меня на соответствующую строку в моем коде.
Пока все хорошо.
Затем я нажимаю «F5», чтобы продолжить. С этого момента все складывается так, будто я нахожусь в бесконечном цикле. IDE всегда возвращает меня к строке исключения. Мне нужно Shift + F5 (остановить отладку / завершить программу), чтобы уйти от него.
Я разговаривал с некоторыми коллегами здесь, и они сказали мне, что с ними тоже иногда случается такое.
Что творится?





Как только вы получите исключение, Visual Studio (или любая другая IDE, которую вы можете использовать) не позволит вам двигаться дальше, если исключение не будет обработано в вашем коде.
Такое поведение является преднамеренным.
Это связано с тем, что исключение не обрабатывается, и Visual Studio не может переместиться за эту строку без какой-либо обработки. Проще говоря, это задумано.
Одна вещь, которую вы можете сделать, - это перетащить точку выполнения (желтая линия / стрелка) в предыдущую точку вашего кода и изменить значения в памяти (с помощью окон наблюдения Visual Studio), чтобы они не вызывали исключения. Затем снова начните выполнять код 1.
Однако лучше остановить выполнение и исправить проблему, которая вызывает исключение, или правильно обработать исключение, если бросок нежелателен.
1 This can have unintended consequences since you are essentially re-executing some code (not rewinding the execution).
Я не вижу желтой линии, вместо этого она показывает зеленую линию с зеленой стрелкой, где произошло исключение, и я не могу никуда переместить зеленую стрелку. Что мне делать в таком случае?
@Anirudh Goel, здесь та же проблема.
Это кажется странным ... иногда мы хотим увидеть, что происходит при попадании необработанного исключения
Вау, не знал, что можно просто перетащить желтую стрелку!
Неперехваченное исключение приведет к остановке вашего приложения. Вместо этого VS просто будет держать вас в неперехваченном исключении. Вам придется завершить работу приложения или выполнить обратную перемотку.
Когда IDE прерывается на вызывающей ошибку строке кода, она останавливается непосредственно перед выполнением строки, которая сгенерировала исключение. Если вы продолжите, он просто выполнит эту строку снова и снова получит исключение.
Если вы хотите пройти мимо ошибки, чтобы увидеть, что произошло бы, если бы ошибка не возникла, вы можете перетащить выделенную желтым цветом строку (строка, которая будет выполняться следующей) вниз к следующей строке кода после ошибочной. Конечно, в зависимости от того, что ошибочная строка не смогла сделать, ваша программа может теперь находиться в состоянии, которое вызывает другие ошибки, и в этом случае вы действительно не очень помогли себе и, вероятно, должны исправить свой код, чтобы исключение либо не выполнялось. не происходит или обрабатывается должным образом.
Вероятно, у вас есть опция «Размотайте стек вызовов по необработанным исключениям», отмеченная в Visual Studio. Когда этот параметр включен, Visual Studio будет раскручиваться прямо перед исключением, поэтому нажатие F5 приведет к тому же исключению.
Если вы отключите этот параметр, Visual Studio прервется при возникновении исключения, но нажатие F5 продолжит выполнение этой строки.
Эта опция находится в меню Инструменты → Опции → Отладка → Общий.
Отличный момент! Обратите внимание, что вы можете изменить значения переменных, вызывающих проблемное исключение, либо через окно Immediate Window, либо просто через часы, и, следовательно, ваша программа продолжит работу.
Есть идеи, как сейчас называется эта опция или где она находится в VS 2017?
Поведение отладчика будет во многом зависеть от отлаживаемого кода. Не могли бы вы отредактировать свой вопрос, включив в него образец кода и указать, какая строка вызывает описанное поведение?