Что такое «исключение при первой возможности»?

105

Что такое исключение при первой возможности? Как и откуда он возникает в программе .NET? И почему он назван таким своеобразным именем (о каком «шансе» мы говорим)?

Фредерик Дурак
источник

Ответы:

78

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

аннаката
источник
21
Это больше, чем концепция отладки; C # не предоставляет удобных средств наблюдения за двухпроходной обработкой исключений во время выполнения, но vb.net делает. В основном, когда генерируется исключение, среда выполнения начинается с поиска в стеке вызовов, чтобы выяснить, кто, если кто-нибудь собирается его поймать. Этот процесс происходит доfinally запуска любых блоков. Как только система решит, кто перехватит исключение (и определит, что кто-то действительно перехватит), система начнет раскручивание стека. Обратите внимание, что если исключение выбрасывается из finallyблока ...
supercat
18
... код, который ожидал поймать исходное исключение, может в итоге этого не сделать; есть много странных угловых случаев.
supercat
5
Это происходит, когда вы настроили отладчик на прерывание при всех сгенерированных исключениях (а не только на необработанных исключениях), или если вы «входите» в какой-то бросающий оператор. Вы увидите сообщение Первое случайное исключение типа «foo» произошло в YourApp.exe . Вы по-прежнему можете продолжить (F5) или сделать следующий шаг (F11). Тогда, если catchдля этого есть, контроль переходит туда. Если catchблока нет , вы получите «второй шанс» прерывания, на этот раз сообщение - Необработанное исключение типа 'foo' произошло в YourApp.exe . Отсюда попытка продолжить или сделать следующий шаг будет безуспешной.
Йеппе Стиг Нильсен
@supercat: Как мне узнать о деталях, о которых вы упомянули в комментариях выше? Это результат экспериментов над собой? чтение книг (какую)? Это очень впечатляющее открытие! Я был бы признателен, если бы вы
нашли
2
@NoSaidTheCompiler: я читал об обработке исключений в различных блогах; Я ожидал, что поиск по запросу "фильтр исключений .net" должен найти несколько блогов по этой теме.
supercat
17

Уведомления об исключении первого шанса возникают при возникновении исключения. Уведомления второго шанса - это когда они не обнаруживаются. (Вероятность - как возможность взломать код в отладчике).

Обработка исключений первого и второго шансов

Ян Джи
источник
ссылка не работает другая ссылка: blogs.msdn.microsoft.com/davidklinems/2005/07/12/…
jha
4

Я только начал использовать отладчик и столкнулся с этим. В своем исследовании я нашел сообщение в блоге MSDN Что такое исключение при первой возможности?это прояснило это для меня.

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

кодирование
источник
Пожалуйста, поместите отрывок (а не всю статью ) того, что вы нашли полезным из этой ссылки. Ранее был ответ только по той же ссылке, которая была удалена.
Марк Холл
Важным выводом для меня является то, что это относится к уведомлению отладчика, а не к тому, что мой код обязательно должен будет обрабатывать, и, что наиболее важно, «сообщения об исключении первого шанса чаще всего не означают, что в коде есть проблема».
codingatty 09
Я добавил ваш комментарий к вашему ответу, я считаю, что ссылка достаточно важна, чтобы держать ее под рукой, я пытаюсь убедиться, что она не будет считаться ответом только по ссылке, как в предыдущий раз.
Марк Холл
0

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

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

Сообщения об исключении первого шанса чаще всего не означают, что в коде есть проблема. Для приложений / компонентов, которые изящно обрабатывают исключения, сообщения об исключении первого шанса позволяют разработчику узнать, что возникла и обработана исключительная ситуация.

Дэвид
источник
0

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

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

Агустин Гарсон
источник