C#程序调试和异常处理(trycatch)
C# 程序调试和异常处理(try catch)
前⾔:
这是⼀篇值得你收藏的⽂章哦。我们在做窗体应⽤或者其他的程序的时候难免会遇到⼀些BUG,⼀些⾃⼰跑起来莫名其妙的效果,或者系统直接报异常,C#提供了功能强⼤的异常处理机制,⽤来对应⽤程序可能产⽣的错误或者其他会造成执⾏中⽌的异常情况进⾏处理,这篇⽂章我们⼀起学习⼀下,关于调试和异常处理的情况。好了,开始学习了。
每⽇⼀遍,学习使我进步
1.程序调试
1.1常见的错误
我们在开发中,程序调试是检查并验证它能够正常运⾏的有效⽅法。在编写程序难免遇到⼀些错误,为了解决错误我们需要对运⾏程序进⾏调试,查出错误的根源。常见的错误信息有以下三种:
1.编译错误:是指在程序在编译过程中出现的错误。常见的是语法错误,缺少括号分号之类的。
2.逻辑错误:当应⽤程序未按照预期⽅式执⾏会产⽣逻辑错误。这种⼀般是语法没错,由于错误的算法引起,如结果不对,公式不对等。这种错误是最难的。
3.运⾏错误:是指在程序运⾏期间执⾏了⾮法发操作或者莫些操作失败。如需要打开的⽂件不到,内存泄漏,以零做除数这些异常只有在运⾏的时候才能表现。
1.2.调试⽅法
我们在调试程序的时候经常使⽤的⼀种⽅法就是使⽤断点。我们在操作的时候:插⼊断点—》调试到断点----》删除断点。在使⽤断点的操作有三种快捷键:F11:逐语句操作,执⾏⼀⾏代码,F10:逐过程操作,执⾏⼀段代码,shift+F10:执⾏跳出操作
2.异常的捕获和处理
异常是在程序执⾏期间出现的问题。C# 中的异常是对程序运⾏时出现的特殊情况的⼀种响应,⽐如尝试除以零。异常提供了⼀种把程序控制权从某个部分转移到另⼀个部分的⽅式。C# 异常处理时建⽴在四个关键词之上的:try、catch、finally 和 throw。
//概念
try:⼀个 try 块标识了⼀个将被激活的特定的异常的代码块。后跟⼀个或多个 catch 块。
catch:程序通过异常处理程序捕获异常。catch 关键字表⽰异常的捕获。
finally:finally 块⽤于执⾏给定的语句,不管异常是否被抛出都会执⾏。例如,如果您打开⼀个⽂件,不管是否出现异常⽂件都要被关闭。throw:当问题出现时,程序抛出⼀个异常。使⽤ throw 关键字来完成。
//⽤法
try ... catch{//异常处理代码}  //捕获异常,可以多个catch
try ... finally{ //⽤于消除try 块中分配的任何资源以及运⾏任何即使在发⽣异常时也必须执⾏的代码}  //清除异常
try ... catch ... finally  // 处理所有异常,前⾯两个的结合
//需要抛出对象
如果异常是直接或间接派⽣⾃ System.Exception 类,您可以抛出⼀个对象。您可以在 catch 块中使⽤ throw 语句来抛出当前的对象,如下所⽰:Catch(Exception e)
try catch的使用方法{
...
Throw e
}
2.1异常类了解
对⼀些常⽤的异常类了解,顺带把Exception的异常类全展⽰。
//常⽤的异常类
Exception:所有异常对象的基类。
SystemException:运⾏时产⽣的所有错误的基类。
IndexOutOfRangeException:当⼀个数组的下标超出范围时运⾏时引发。
NullReferenceException:当⼀个空对象被引⽤时运⾏时引发。
InvalidOperationException:当对⽅法的调⽤对对象的当前状态⽆效时,由某些⽅法引发。
ArgumentException:所有参数异常的基类。
ArgumentNullException:在参数为空(不允许)的情况下,由⽅法引发。
ArgumentOutOfRangeException:当参数不在⼀个给定范围之内时,由⽅法引发。
InteropException:⽬标在或发⽣在CLR外⾯环境中的异常的基类。
ComException:包含COM类的HRESULT信息的异常。
SEHException:封装Win32结构异常处理信息的异常。
SqlException:封装了SQL操作异常。
//其他Exception 类描述
SystemException 其他⽤户可处理的异常的基本类
ArgumentException ⽅法的参数是⾮法的
ArgumentNullException ⼀个空参数传递给⽅法,该⽅法不能接受该参数
ArgumentOutOfRangeException 参数值超出范围
ArithmeticException 出现算术上溢或者下溢
ArrayTypeMismatchException 试图在数组中存储错误类型的对象
BadImageFormatException 图形的格式错误
DivideByZeroException 除零异常
DllNotFoundException 不到引⽤的DLL
FormatException 参数格式错误
IndexOutOfRangeException 数组索引超出范围
InvalidCastException 使⽤⽆效的类
InvalidOperationException ⽅法的调⽤时间错误
MethodAccessException 试图访问思友或者受保护的⽅法
MissingMemberException 访问⼀个⽆效版本的DLL
NotFiniteNumberException 对象不是⼀个有效的成员
NotSupportedException 调⽤的⽅法在类中没有实现
NullReferenceException 试图使⽤⼀个未分配的引⽤
OutOfMemoryException 内存空间不够
PlatformNotSupportedException 平台不⽀持某个特定属性时抛出该错误
StackOverflowException 堆栈溢出
Exception:所有异常对象的基类。
SystemException:运⾏时产⽣的所有错误的基类。
IndexOutOfRangeException:当⼀个数组的下标超出范围时运⾏时引发。
NullReferenceException:当⼀个空对象被引⽤时运⾏时引发。
InvalidOperationException:当对⽅法的调⽤对对象的当前状态⽆效时,由某些⽅法引发。
ArgumentException:所有参数异常的基类。
ArgumentNullException:在参数为空(不允许)的情况下,由⽅法引发。
ArgumentOutOfRangeException:当参数不在⼀个给定范围之内时,由⽅法引发。
InteropException:⽬标在或发⽣在CLR外⾯环境中的异常的基类。
ComException:包含COM类的HRESULT信息的异常。
SEHException:封装Win32结构异常处理信息的异常。
SqlException:封装了SQL操作异常。
2.2 ⾃定义异常
在实际应⽤中,如果系统提供的异常类不能满⾜需求,我们就可以⾃⼰⾃定义异常,可以⾃⼰创建异常类。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。