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

在 VS2008 中按 F5 时,finally 块似乎没有执行。我在控制台应用程序中使用此代码。

4

5 回答 5

11

当您遇到未捕获的异常(在本例中为除以零异常)时,Visual Studio 调试器会停止执行。在调试模式下,Visual Studio 更喜欢中断执行并在错误源处为您提供一个弹出框,而不是让应用程序崩溃。这是为了帮助您找到未捕获的错误并修复它们。如果您分离调试器,则不会发生这种情况。

尝试在没有附加调试器的情况下从控制台以发布模式运行它,您将看到您的消息。

于 2010-08-06T07:18:37.293 回答
2

如果您希望它在调试时执行,您可以做两件事:

1)捕捉正确的异常:


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

2) 告诉 Visual Studio 忽略未处理的异常。转到 Debug-->Exceptions,然后您可以取消选中 Common Language Runtime Exceptions “User-unhandled” 选项,或者您可以展开该节点,并取消选中单个异常类型。

于 2010-08-06T12:37:03.433 回答
1

F5 继续应用程序直到下一个断点或未处理的异常。

我认为您应该使用 F10 而不是进行步骤调试或为所有异常(已处理或未处理)打开中断。

于 2010-08-06T07:21:09.630 回答
0

作为最后的结论我们都应该同意,如果有一个未处理的异常并且应用程序在调试模式下运行,最终将不会被执行。

于 2010-08-06T09:34:11.180 回答
0

不要通过 F5 运行您的应用程序。在调试模式下不能跳过异常,消息框会一次又一次地弹出。

而是通过 CMD、Far Manager 等构建并运行

于 2010-08-06T07:25:05.910 回答