C#:如果未捕获异常会发生什么

时间:2011-03-22 02:08:28

标签: c# unhandled-exception

如果未捕获异常,C#程序会发生什么。程序是否因运行时错误而“崩溃”?

5 个答案:

答案 0 :(得分:10)

  

如果未捕获异常,C#程序会发生什么。程序是否因运行时错误而“崩溃”?

可能。

也许不是。

实施定义

例如,您可能会看到一个对话框,显示“存在未处理的异常,我发现您已安装Visual Studio。您是否要启动调试器并检查程序状态?”

您可能会看到一个对话框,显示“存在未处理的异常,您要向Microsoft报告吗?”

如果您已经在调试器中运行,那么调试器可能会引起您的注意。

允许运行时执行任何操作,包括询问您该怎么做。

请注意,运行时识别是否在运行finally块之前是否存在catch块或。您可以使用控制台应用轻松演示此功能。编写一个崩溃的应用程序,并在finally块中输出:

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

看看会发生什么?运行时报告错误,为调试器提供运行机会,或者在运行finally块之前向报告问题。如果他们运行的话。他们可能不会。 任何事情都可能发生。用户可以决定销毁进程,或者启动调试器并修复异常等等。

如果确实想要了解C#中的异常如何工作,那么您应该阅读:

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

答案 1 :(得分:8)

答案 2 :(得分:1)

发生了一些“例外”,你的程序不知道如何处理它,所以它必须在那时停止执行并“崩溃”。崩溃后会执行代码,例如finally块,但基本上派对已经结束了。

最好的办法是记录这些事件,尽可能多地提供有关崩溃时系统/程序状态的信息。 Logging Application Block是记录错误的更强大的自动方法之一。

答案 3 :(得分:0)

试试吧!根据错误,它通常会捕获。现在,至于是否应该捕获所有异常,如果a[i]之类的内容,如果i太大,它可能会引发错误,但您知道i应该保留在其中边界(例如,在for循环中),你不会捕获该异常。

但是,如果您使用来自用户的数据(例如,来自GUI),您几乎总是会对其进行验证。

答案 4 :(得分:0)

亲自试试!

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

在调试模式下编译并运行它,以便快速回答您的问题。

或者只是写一些程序。迟早,你的代码会抛出异常;它发生在我们所有人身上,通常比我们可以计算的次数多。在控制台或WinForms应用程序中,未处理的异常通常会使程序崩溃;在ASP.NET中,它将生成一个错误页面,但它不会崩溃整个网站。您还可以编写自定义代码,指定在未处理的异常情况下要执行的操作,以便您的应用程序正常失败。