Что-то поглощает необработанные исключения? - PullRequest
1 голос
/ 23 декабря 2009

В приложении, которое я создаю, иногда исключения, которые выбрасываются, но не обрабатываются, как будто исчезают из воздуха и вызывают странные ошибки в GUI.

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

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

У меня нигде нет пустых блоков catch или чего-то подобного.

Ответы [ 3 ]

3 голосов
/ 23 декабря 2009

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

Ошибка и обходной путь на Microsoft Connect .

Edit:

Если кого-то интересует причина, это было опубликовано, когда ошибка была закрыта:

Hello

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

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

С уважением, Отладчик Visual Studio

1 голос
/ 30 декабря 2009

Вот подсказка отладки для поиска таинственных исключений: в Visual Studio перейдите в раздел Отладка -> Исключения ... и отметьте «Брошенный» для Общих исключений времени выполнения. Таким образом, всякий раз, когда возникает исключение, среда IDE ломается. Я часто использовал это, чтобы найти исключения, которые, похоже, проглотили.

Не забудьте, однако, выключить его. :)

0 голосов
/ 23 декабря 2009

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

См. этот связанный вопрос

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