2013-12-17 4 views
0

Несколько дней назад наша новая копия Visual Studio 2013 была отправлена ​​нам. Я работал с 2010 годом, и после работы с 2013 года на пару дней мне это очень нравится, но теперь я нашел что-то действительно раздражающее. Посмотрите: enter image description hereVisual Studio 2013 ловли необработанные исключения

Ну, моя Visual Studio находится на немецком языке, но я думаю, что вы можете получить то, что происходит. Что мне интересно, почему VS говорит, что у меня есть необработанное исключение. Что еще, кроме попыток поймать это, я могу сделать, чтобы справиться с этим исключением?

Это всего лишь пример. Мой реальный код немного сложнее, и try/catch находится на некоторых уровнях выше этого фрагмента кода.

Я не помню, как VS2010 вел себя так.

я заглянула в настройках исключений, но я ничего не изменилось, поэтому я буду использовать настройки по умолчанию: enter image description here

Что мне интересно, почему VS имеет дело с этим кодом, как если бы это было необработанный, когда, как вы можете видеть, это не так. Вот почему я не хочу ничего менять в настройках исключения. Есть ли у вас какие-либо идеи или предложения?

+0

'activateCommunication' кажется метод, который вы написали, попытались F11 (внутри шаг за шагом) в этот метод, чтобы увидеть, если' IOException' происходит в этом методе? – AlexB

+0

Благодаря кому-то заставляя картинки вместо ссылок и исправляя мой английский ;-). – foxtrott79

+0

@AlexB: Да activateCommunication() - это самоналоженный метод моего колледжа. Он исходит из другой dll без отладочной информации, поэтому на этом этапе наступление невозможно. Но я могу вам сказать: да, методы IOExceptions выбраны методом, потому что я отключил свой SerialDevice с моего ПК, чтобы проверить эту ситуацию. Для обработки этой ситуации существует некоторый код, выполняющий мое приложение отдельно от файловой системы, а не VS, исключение поймано и обрабатывается MessageBox. Поэтому нет причин, по которым VS останавливается прямо здесь :( – foxtrott79

ответ

1

Это помогает вам. Во время выполнения вы получите ожидаемый результат, т.е. он пойдет в блок catch.

Отключить все исключения в параметрах, и VS проигнорирует все ваши исключения и позволит коду их поймать.

EDIT:

Вы должны расширить списки, как они будут содержать выбранные элементы, даже если родитель/группа флажок снят.

+2

OP говорит (и показывает), что опция прерывания обработанных исключений уже отключена, и OP (предположительно) действительно хочет сломать необработанные исключения. Таким образом, параметры уже есть то, что они должны быть, я думаю. – hvd

+0

Если вы разворачиваете списки, вы увидите, что это не так. – Alex

+0

Не говорите мне, скажите OP, положив это в свой ответ! :) Если вы правы (и, может быть, вам и положено), мне кажется, что это именно то, что ищет OP. – hvd

1

поэтому я попробовал Alex свой намек, чтобы снять флажок «Исключение» в диалоговом окне.

После удаления исключения мой код действовал так, как будто он выходит за пределы отладчика VS. Но я был недоволен заявлением

Настройка «глобальная». Он будет игнорировать исключение с тех пор

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

Один из них сказал (как мой VS в немецком я transalted его английский сам, может быть, текст совсем немного отличается в реальном времени): IOException не было обработано - это необработанное IOException после убрав пункт на диалоговое окно «Исключение».

Другой сказал (переведено мной снова): IOException не обрабатывался usercode - это, пока элемент отмечен в диалоговом окне «Исключение-исключение».

В чем разница между кодом и кодом пользователя?

Я пошел в Google для изучения, я нашел два очень важных сайта. Сначала объясняется значение ExceptionDialog. Я ничего не цитирую, потому что вся информация на этом сайте примечательна.

ExceptionDialog explained

Теперь дайте нам знать, как VS обнаруживает USERCODE. Поэтому я нашел secound сайт:

usercode

С учетом всех этих информаций я сделал эти опыты

  1. Delte .pdb файл из библиотеки DLL, содержащей activateCommunication() -> VS не сломаться
  2. Вставьте pdb снова, снят флажок «Включить процесс хостинга Visual Studio» -> VS не сломался

Ну, это немного теперь более ясно. Я все еще удивляюсь, почему с хостингом включен процесс VS, даже если у меня есть код обработки. Может быть, есть какой-то debugCode, который вызывает мой метод, который можно рассматривать как «системный код», упомянутый на веб-сайте!?!?

Ну, вот что я узнал.

Приветствия Ronny

+0

Интересно. Однако трюк .pdb на самом деле не трюк, поскольку без файла .pdb vs не имеет информации о том, где находятся BP. Насколько я знаю. – Alex

Смежные вопросы