Продолжение в отладчике Visual Studio после возникновения исключения - PullRequest
44 голосов
/ 03 октября 2008

Когда я отлаживаю программу на C # и получаю исключение (либо с помощью кода, либо с помощью платформы), IDE останавливается и возвращает меня к соответствующей строке в моем коде.

Пока все хорошо.

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

Я разговаривал с некоторыми коллегами здесь, и они сказали мне, что это иногда случается и с ними.

Что происходит?

Ответы [ 5 ]

47 голосов
/ 11 апреля 2014

Возможно, в Visual Studio включена опция " Развернуть стек вызовов для необработанных исключений ". Когда этот параметр включен, Visual Studio будет раскручиваться вправо перед исключением, поэтому нажатие F5 будет продолжать увеличиваться до того же исключения.

Если вы снимите флажок, Visual Studio прекратит работу в исключении, но нажатие F5 продолжит эту строку.

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

17 голосов
/ 03 октября 2008

Это связано с тем, что исключение не обрабатывается, и Visual Studio не может пройти дальше этой строки без какой-либо обработки. Проще говоря, это дизайн.

Одна вещь, которую вы можете сделать, это перетащить точку выполнения (желтая линия / стрелка) на предыдущую точку в вашем коде и изменить значения в памяти (используя окна наблюдения Visual Studio), чтобы они не вызывали исключение. Затем начните снова шагать по коду 1 .

Лучше, хотя бы остановить выполнение и исправить проблему, которая вызывает исключение, или правильно обработать исключение, если бросок нежелателен.

1 Это может привести к непредвиденным последствиям, поскольку вы по существу повторно выполняете некоторый код (не перематываете выполнение).

4 голосов
/ 03 октября 2008

Когда среда IDE прерывается на ошибочной строке кода, она останавливается непосредственно перед выполнением строки, которая сгенерировала исключение. Если вы продолжите, он просто снова выполнит эту строку и снова получит исключение.

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

3 голосов
/ 03 октября 2008

Как только вы получите исключение, Visual Studio (или любая другая IDE, которую вы, возможно, используете) не позволит вам двигаться дальше, если исключение не обработано в вашем коде.

Такое поведение задуманно.

2 голосов
/ 03 октября 2008

Неисследованное исключение приведет к остановке вашего приложения. Вместо этого VS просто оставит вас в невыясненном исключении. Вам придется прекратить или повернуть свое приложение назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...