Почему Real Studio выходит на ловушку исключения? - PullRequest
1 голос
/ 19 апреля 2011

У меня есть блок try-catch, подобный этому:

Try
  Listbox1.RemoveRow(Listbox1.ListIndex)
Catch err As OutOfBoundsException
  MsgBox("Derp")
End Try

Когда я запускаю свой проект в отладчике, я получаю OutOfBoundsException в точной строке, которую я пытался поймать! Почему это не работает?!?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Отладчик прекратит работу, как только возникнет исключение, прежде чем любой другой код будет выполнен. Это включает любой код обработки исключений, который вы, возможно, вставили как блок Try ... Catch.

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

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

Хирургический вариант заключается в использовании прагматических директив для переключения на включение и выключение исключений вокруг проблемного кода:

#Pragma BreakOnExceptions Off
try
  Listbox1.RemoveRow Listbox1.ListIndex
catch err As OutOfBoundsException
  MsgBox "Derp"
End
#Pragma BreakOnExceptions On

Это гораздо предпочтительнее, чем просто отключить часть отладчика. Примечание: директива BreakOnExepctions вернет вам глобальные настройки (вкл. Или выкл.), Как только функция вернется и будет локальной для кода, который она окружает.

2 голосов
/ 19 апреля 2011

Мне кажется, что отладчик сломается на этой строке и покажет вам исключение. Но если вы нажмете кнопку «Продолжить», она продолжит работу, перехватит исключение и отобразит сообщение.

Возможно, они изменили поведение отладчика в этом выпуске.

Обновление: вы можете перейти в Project> Break on exception, чтобы изменить это

...