Почему Real Studio ломается при обнаружении исключения?

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

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

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


person None    schedule 19.04.2011    source источник


Ответы (2)


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

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

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

person Ammar    schedule 19.04.2011

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

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

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

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

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

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

person Andrew Lambert    schedule 20.04.2011