Есть ли лучший способ заставить визуальную студию игнорировать попытку/поймать в режиме отладки

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

#If Debug=False Then

Try

#End If

'some code here

#If Debug=False Then

Catch ex as exception

    Messagebox.Show("Errors suck")

End Try

#End If

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


person Community    schedule 21.05.2009    source источник
comment
Вы когда-нибудь успешно решали эту проблему? Вам все еще нужна помощь с этим?   -  person jcolebrand    schedule 14.12.2010


Ответы (4)


В VS.NET вы можете указать, хотите ли вы, чтобы отладчик прерывал работу при сгенерированном исключении (а не только тогда, когда оно необработано).

Посмотрите на отладку | Исключения... пункт меню (Ctl-Alt-E на моих сочетаниях клавиш). Выберите интересующее вас исключение, затем отметьте поле «выброшено» для этого исключения.

Вы можете установить этот флажок на нескольких уровнях (все исключения CLR, все исключения CLR в заданном пространстве имен или очень специфические исключения).

person Martin Peck    schedule 21.05.2009

Нет хорошего способа заставить его игнорировать попытку поймать, кроме того, что вы сделали. Но вы можете сделать код немного чище и, по сути, получить тот же эффект. По сути, вы пытаетесь предотвратить запуск действия в блоке catch. Лучший способ сделать это — условно скомпилированный метод.

Try
... 
Catch ex As Exception
  DebugLog(ex)
  Throw
End Try

<Condition("DEBUG)> _
Public Sub DebugLog(ByVal ex As Exception) 
  Messagebox.Show("errors suck")
End Sub
person JaredPar    schedule 21.05.2009

В разделе catch вашего Try..Catch вы должны записать сообщение об исключении, трассировку стека и все, что вам может понадобиться, в файл журнала - кроме того, вы также можете записать эти данные в журнал событий Windows.

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

person Nate    schedule 21.05.2009

Вот как я это делаю:

Включено:

Try ' : Catch: End Try
  doSomething
  andSomeMore
  etcEtc
' Try
Catch ex As Exception
  handleException
End Try

Отключите вышеуказанное, удалив два символа комментария:

Try : Catch : End Try
  doSomething
  andSomeMore
  etcEtc
Try
Catch ex As Exception
  handleException
End Try
person Magnus    schedule 07.09.2015