繁体   English   中英

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

[英]C#: what happens if an exception is not caught

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

如果未捕获异常,在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块之前将问题报告给Microsoft等。 如果它们全部运行。 他们可能不会。 什么都可能发生 用户可以决定销毁该过程,或启动调试器并修复异常,等等。

如果您真的想了解C#中异常的工作方式,则应阅读以下内容:

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

是。

是。

发生了“异常”事件,并且您的程序不知道如何处理它,因此它必须在此时停止执行并“崩溃”。 崩溃后将执行一些代码,例如finally块,但基本上,代码的聚会结束了。

最好的办法是记录这些事件,以便在崩溃时尽可能多地了解系统/程序的状态。 记录应用程序块是记录错误的更强大的自动方法之一。

试试吧! 根据错误,通常会捕获该错误。 现在,应该捕获所有异常,如果a[i]a[i]东西如果i太大则可能引发错误,但是您知道i应该被限制在范围之内(例如,在for循环中) ),则不会捕获该异常。

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

自己尝试!

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

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

或者只是编写一些程序。 迟早,您的代码将引发异常; 它发生在我们所有人身上,通常发生在我们无法计数的时间。 在控制台或WinForms应用程序中,未处理的异常通常会使程序崩溃。 在ASP.NET中,它将生成一个错误页面,但不会使整个网站崩溃。 您还可以编写自定义代码,以指定在发生未处理的异常的情况下应采取的措施,以使应用程序正常运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM