наконец, кажется, не выполняется в консольном приложении C # при использовании F5 - PullRequest
10 голосов
/ 06 августа 2010
int i=0;
try{
    int j = 10/i;
}
catch(IOException e){}
finally{
    Console.WriteLine("In finally");
    Console.ReadLine();
}

Блок finally не выполняется при нажатии клавиши F5 в VS2008.Я использую этот код в консольном приложении.

Ответы [ 5 ]

10 голосов
/ 06 августа 2010

Отладчик Visual Studio останавливает выполнение, когда вы получаете необработанное исключение (в этом случае исключение деления на ноль). В режиме отладки Visual Studio предпочитает прерывать выполнение и отображать всплывающее окно с источником ошибки, а не с ошибкой приложения. Это поможет вам найти необнаруженные ошибки и исправить их. Этого не произойдет, если вы отсоедините отладчик.

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

2 голосов
/ 06 августа 2010

Если вы хотите, чтобы он выполнялся во время отладки, вы можете сделать две вещи:

1) Поймать правильное исключение:


    int i = 0;
    try
    {
        int j = 10 / i;
    }
    catch(DivideByZeroException e){}
    finally
    {
        Console.WriteLine("In finally");
        Console.ReadLine();
    }

2) Сказать Visual Studio игнорировать необработанные исключения,Перейдите в раздел «Отладка -> Исключения», и затем вы можете снять флажок «Обязанности пользователя» для общеязыковой среды выполнения, или вы можете развернуть этот узел и снять отметки с отдельных типов исключений.

1 голос
/ 06 августа 2010

F5 продолжает приложение до следующей точки останова или необработанного исключения.

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

0 голосов
/ 06 августа 2010

В качестве окончательного заключения мы все должны согласиться, что если есть необработанное исключение и приложение работает в режиме отладки, то, наконец, оно не будет выполнено.

0 голосов
/ 06 августа 2010

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

Вместо этого соберите его и запустите через CMD, Far Manager и т. Д.

...