Продолжение работы в отладчике Visual Studio после возникновения исключения

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

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

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

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

Что творится?

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

Chris Lawlor 03.10.2008 00:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
46
1
13 551
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Как только вы получите исключение, 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 01.06.2011 08:15

@Anirudh Goel, здесь та же проблема.

Pedro77 03.06.2013 22:52

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

Don Cheadle 17.01.2017 22:31

Вау, не знал, что можно просто перетащить желтую стрелку!

information_interchange 03.05.2018 18:40

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

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

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

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

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

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

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

information_interchange 03.05.2018 18:44

Есть идеи, как сейчас называется эта опция или где она находится в VS 2017?

HardCode 24.10.2019 17:22

Другие вопросы по теме