Исключение из правил При первой возможности
-
22-08-2019 - |
Вопрос
я пробежался по справочным документам MSDN, чтобы освоиться с Visual Basic.После опробования примера с использованием таймеров - one перетаскивает компонент label и timer в конструктор и добавляет следующее в подпрограмму components
Label1.Text = My.Computer.Clock.LocalTime.ToLongTimeString
Вывод для немедленного окна во время отладки следующий
Первое случайное исключение типа 'System.Возникло исключение InvalidCastException' в Microsoft.VisualBasic.dll
Первое случайное исключение типа 'System.Возникло исключение InvalidCastException' в Microsoft.VisualBasic.dll
Та же ошибка возникает в предыдущем примере MSDN с использованием компонента контекстного меню.Должен ли я Try...Catch...Finally
эту ошибку и попытаться двигаться дальше?Или я имею дело с чем-то гораздо более серьезным?
Решение
Когда вы видите что-то об исключении первой случайности, это означает только то, что исключение было поймано в вызванном вами коде, но не обязательно означает, что код не удался.Если код выполняется без сбоев вашей программы и возвращает допустимое значение, то проблем нет.Вы также увидите выходные данные в окне отладки об исключениях первого шанса, когда вы реализуете свои собственные блоки try / catch.
Другие советы
В меню Debug -> Exceptions вы можете включить остановку отладчика при первом возникновении исключения, даже если оно будет перехвачено позже;если вы хотите выяснить, что происходит, это самый простой способ сделать это
В исключении первого шанса изучите детали исключения.Вы должны увидеть свойство stack frame / trace стека.Там вы должны увидеть, в какой строке возникает ошибка.Это должно вам помочь.
В IDE попробуйте перейти в Tools > Options > Projects and Solutions > VB Defaults и установить параметр Strict равным 'On' - это может помочь выявить проблемы с приведением при компиляции вашего проекта, а не при его запуске.
"Выполнение при первой возможности" не обязательно означает, что у вас есть проблема в вашем коде.Это может означать, что IDE, или компилятор, или любой другой задействованный компонент обнаружил и обработал ошибку, и в процессе отладчик получает уведомление, а сообщение об исключении выводится в окно immediate.Это отличный пост на эту тему:
http://blogs.msdn.com/davidklinems/archive/2005/07/12/438061.aspx
Быстрым и простым решением для отладки и диагностики исключения первой случайности является :
AppDomain.CurrentDomain.FirstChanceException += CurrentDomainOnFirstChanceException;
и тогда
private void CurrentDomainOnFirstChanceException(object sender, FirstChanceExceptionEventArgs firstChanceExceptionEventArgs)
{
if (firstChanceExceptionEventArgs.Exception is NullReferenceException)
{
// do your handling and debugging :)
}
}
Многократное исключение первой вероятности во время выполнения может снизить производительность вашего приложения, поскольку обработка исключений является дорогостоящей.Особенно в веб-приложениях.Вы можете добавить этот обработчик и посмотреть на конкретные исключения первого шанса и попытаться избежать / исправить их.