C #: что происходит, если исключение не пойман - PullRequest
1 голос
/ 22 марта 2011

Что происходит в программе на C #, если исключение не обнаружено.Программа "вылетает" с чем-то вроде ошибки во время выполнения?

Ответы [ 5 ]

10 голосов
/ 22 марта 2011

Что происходит в программе на C #, если исключение не обнаружено. Программа «вылетает» с чем-то вроде ошибки во время выполнения?

Может быть.

Возможно, нет.

Что происходит, определяется реализацией .

Например, вы можете получить диалоговое окно, в котором говорится, что «произошло необработанное исключение, и я вижу, что у вас установлена ​​Visual Studio. Хотите запустить отладчик и проверить состояние программы?»

Может появиться диалоговое окно, в котором говорится: «Произошло необработанное исключение, вы хотите сообщить об этом в Microsoft?»

Если вы уже работаете в отладчике, отладчик, вероятно, что-то делает, чтобы привлечь ваше внимание.

Среде выполнения разрешено делать все, что она хочет, и это включает в себя вопрос о том, что делать.

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

Unhandled Exception: System.Exception: Exception of type 
'System.Exception' was thrown at 
ConsoleApplication1.Program.Main(String[] args) 
finally running now

Видите, что происходит? Среда выполнения сообщает об ошибке, дает отладчику возможность запуска или сообщает о проблеме в Microsoft, или что-то в этом роде, за до он запускает блоки finally. Если они вообще бегут. Они не могут. Может произойти все, что угодно . Пользователь может решить уничтожить процесс или запустить отладчик и исправить исключение или что-то еще.

Если вы действительно хотите понять, как работают исключения в C #, вам следует прочитать это:

http://blogs.msdn.com/b/cbrumme/archive/2003/10/01/51524.aspx

8 голосов
/ 22 марта 2011

Да.

1 голос
/ 22 марта 2011

Да.

Произошло что-то «исключительное», и ваша программа не знает, как с этим справиться, поэтому она должна остановить выполнение в этот момент и «вылететь». Будет код, который будет выполнен после сбоя, например, блоки finally, но в основном ваша партия закончилась.

Лучше всего регистрировать эти события, предоставляя как можно больше информации о состоянии системы / программы во время сбоя. Блок приложения ведения журнала является одним из наиболее надежных автоматических способов регистрации ошибок.

0 голосов
/ 22 марта 2011

Попробуй сам!

class Program
{
    static void Main(string[] args)
    {
        int[] arr = new int[1];
        arr[5] = 6;   //throws an exception; what kind?
    }
}

Скомпилируйте и запустите это в режиме отладки для быстрого ответа на ваш вопрос.

Или просто напишите несколько программ. Рано или поздно ваш код выдаст исключения; это случается со всеми нами, обычно больше раз, чем мы можем сосчитать. В консольных или WinForms-приложениях необработанное исключение обычно приводит к сбою программы; в ASP.NET будет сгенерирована страница с ошибкой, но не произойдет сбой всего сайта. Вы также можете написать собственный код, который указывает, что делать в случае необработанного исключения, чтобы ваше приложение не сработало.

0 голосов
/ 22 марта 2011

Попробуй! В зависимости от ошибки, это обычно ловит. Теперь, когда все исключения должны быть перехвачены, если это что-то вроде a[i], где он МОЖЕТ выдать ошибку, если i слишком велико, но вы знали, что i должен был оставаться в пределах (например, в цикл for), вы не поймете это исключение.

Однако, если вы используете данные, поступающие от пользователя (скажем, из GUI), вы почти всегда проверяете их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...