调试与异常

Posted jason-365

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调试与异常相关的知识,希望对你有一定的参考价值。

错误分类:

   1,语法错误

   2,运行期错误

   3,逻辑错误

C#语言的异常处理功能可帮助您处理运行时出现的任何意外或异常情况。

  很多情况下,异常可能不是由代码直接调用的方法引发,而是由调用堆栈中位置更靠下的另一方法所引发。在这种情况下,CLR将展开堆栈,查找是否有方法包含针对特定异常类型的catch块,如果找到这样的方法,就会执行找到的第一个这样的catch块。如果在调用堆栈中的任何位置都没有找到适合的catch块,就会终止该进程,并向用户显示一条消息。

 

    特点:

        各种类型的异常最终是由System.Exception派生而来。

        在可能引发异常的语句周围使用try块。

        一旦try块中发生异常,控制流将跳转到第一个关联的异常处理程序(无论该处理程序存在于调用堆栈中的什么位置)。在C#中,catch关键字用于定义异常处理程                         序。

        如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息。

        除非您可以处理某个异常并使应用程序处于已知状态,否则请不要捕捉该异常。如果捕捉System。Exception,请在catch块的末尾使用thow关键字再次引发该异常

        如果catch块定义了一个异常变量,则可以用它获取有关所发生异常类型的更多信息。

        程序可可以使用throw关键字来显示地引发异常。

        异常对象包含有关错误的详细信息,比如调用堆栈的状态以及有关错误的文本说明。

        即使发生异常,也会执行finaly块中的代码。

        。netFramework中的托管异常时凭借Win32 结构化异常处理机制实现的。

Finally块

    可以使用finally块清理在try块中执行的操作。

    释放资源(如文件流、数据库连接和图形句柄(指针)),而不用等待有运行时中的垃圾回收器来完成

    在下面实例中,使用finally块关闭在try块中打开的文件。注意:在关闭文件之前要检查该文件句柄的状态。如果try块无法打开文件,则文件句柄具有值null,并且finally块不会尝试关闭它。或者try块中成功打开该文件,则finally 块将关闭打开的文件。

throw语句两种使用方式

    (1)直接抛出异常;

    (2)在出现异常时,通过含有catch块对其进行处理并使用throw语句重新把这个异常抛出并让调用这个方法的程序进行捕捉和处理。throw语句使用语法如下:

      》throw【表达式】;

      throw语句也可以不带“表达式”,此时只能用catch块中,在这种情况下,它重新抛出当前正在由catch块处理的异常。

什么情况下使用异常

    是专为跟踪例外的,事先没有预料的,而且可能造成严重后果的情况设计的。在抛出异常时会产生些许性能损失。

 

以上是关于调试与异常的主要内容,如果未能解决你的问题,请参考以下文章

调试与异常

Python-异常处理与调试

Python内置的处理异常机制与调试

Windows和Linux下排查C++软件异常的常用调试器与内存检测工具详细介绍

软件调试

Azure 远程调试:无法从 HRESULT 启用远程调试异常:0x89710023