Если вы хотите остановить процесс, используйте кнопку «Стоп». Есть моменты, когда полезно остановить приложение. Причина, по которой отладчик не настаивает на уничтожении приложения, заключается в том, что программист может захотеть проверить состояние программы в контексте сгенерированного исключения и / или «подтолкнуть» вещи таким образом, чтобы программа могла продолжаться. Стоит отметить, что ловушка отладчика возникает до запуска финализаторов; это позволяет исследовать аспекты состояния программы, которые могут быть разрушены во время финализации.
Обратите также внимание, что возможно наличие исключения, которое вызовет ловушку отладчика "uncaught exception" и все же не завершит программу. Например, можно сделать что-то вроде:
Class exTest
Class myException
Inherits Exception
Sub New(ByVal innerException As Exception)
MyBase.new("Wrapped Exception", innerException)
End Sub
End Class
Shared Function CopyArg1ToArg2AndReturnFalse(Of T)(ByVal arg1 As T, ByRef arg2 As T) As Boolean
arg2 = arg1
Return False
End Function
Shared Sub testIt()
Dim theException As Exception = Nothing
Try
Try
Throw New ApplicationException
Catch ex As Exception When CopyArg1ToArg2AndReturnFalse(ex, theException)
Throw
Finally
If theException IsNot Nothing Then Throw New myException(theException)
End Try
Catch ex As myException
Debug.Print("Exception: " & ex.InnerException.ToString)
End Try
End Sub
End Class
Система определяет, прежде чем какие-либо предложения finally будут вызваны исключением, что никто не собирается перехватывать ApplicationException. Однако, как это случается, если исключение действительно генерируется, предложение Наконец предотвратит выход этого конкретного исключения, создав новое собственное исключение - новое исключение, которое будет поймано.
Этот прием может быть полезен для отладки в ситуациях, когда некоторые исключения будут перехвачены и обработаны на внутреннем уровне (не нарушая пользовательский опыт), в то время как другие будут перехвачены на внешнем уровне (например, выдав сообщение об ошибке). Исключения, которые будут захвачены только на внешнем уровне, будут генерировать ловушку отладчика при их возникновении, в то время как те, которые захвачены на внутреннем уровне, позволят программе продолжиться.