处理错误和调试

一、调试
1、程序错误
程序中产生的错误分为三种:
1)编译错误
又称语法错误,是在程序编译过程中发生的。编译错误是由于程序员在编写代码过程中没有依照语法的规则而产生的。如漏掉一些必要的标点符号等。
2)运行时错误
运行时错误是指程序在运行过程中,执行了某些非法操作或无法实施的操作而发生的错误。如除法运算,除数是0,编译时无法发现错误,到了运行时才会暴露出来。
3)逻辑错误
是指程序在编译和运行时都没出错,但程序没有按照预定的方式运行,无法得到预期的输出结果。这类错误要借助调试工具来检查。

 

2、程序调试
VS2005提供了一个集成的调试器,可用来分析程序的运行过程及变量和属性的变化情况。
使用调试器时,需要在代码中插入断点。断点是调试程序常用的工具。
设置断点有三种方法,推荐用选中要中断的代码处,然后按F9设置断点和取消断点。
设置断电后,按F5可以启动调试
调试程序时,可以使用几种方式控制调试的过程:
1)逐语句 F11
2)逐过程 F10
3)停止 SHIFT+F5
逐语句和逐过程有何区别呢?存留疑问!

调试器还提供了一下工具,用来监控程序的执行
1)局部变量窗口
可以列出当前作用域(正在执行的函数)内的变量,并对变量值的变化进行跟踪。
2)监视窗口
监视窗口可用来计算变量和表达式的值,并通过程序的执行跟踪它们的值。与局部变量窗口不同:监视窗口中要监视的变量需要人为添加,当程序开始调试时,可以在代码中也可
在局部变量窗口,选中变量单击右键,然后选中菜单中的“添加监视”,此时监视窗口中才会有该变量的监视信息。
3)快速监视窗口
快速监视窗口用来快速计算变量和表达式的值,但每次只能显示一个变量的值,且程序运行过程中不能对变量值的变化进行跟踪。添加方法同监视窗口。(是不是没什么用?或在
什么地方用呢?存留疑问!)

 

二、异常处理
程序在运行过程中总会遇到各种异常情况,有可能是程序自身产生的异常或者系统产生的异常。C#提供了多种方法处理异常,如:throw语句、try...catch语句、finally语句。
1、throw语句
1)在C#语句中,有两种方式可以引发异常:
a、使用throw语句显示引发异常
b、程序中的语句执行过程激发了某个异常条件,使得程序无法正常执行,从而引发异常。
throw语句以程序的方式显示地引发异常,既可以引发.NET Framework预定义的程序异常,又可以引发用户自定义的异常。
throw语句的语法格式:
throw 异常对象;


2)异常对象从System.Exception类派生,System.Exception类是所有异常的基类(其实SystemException 类为 System 命名空间中的预定义异常定义基类,但SystemException类是Exception类派生出来的,所以可以称Exception类为所有异常的基类),派生出来的部分异常类如下:
a、ArgumentException 在向方法提供的其中一个参数无效时引发的异常。
b、ArgumentNullException 当将空引用传递给不接受它作为有效参数的方法时引发的异常。
c、DivideByZeroException 试图用零除整数值或十进制数值时引发的异常。
d、IndexOutOfRangeException 试图访问索引超出数组界限的数组元素时引发的异常。无法继承此类。
e、InsufficientMemoryException 当检测到没有足够的可用内存时引发的异常。无法继承此类。
f、InvalidCastException 因无效类型转换或显式转换引发的异常。


3)System.Exception类的部分属性和说明
a、Message 该属性包含了当前异常的消息
public virtual string Message { get; }
属性值
解释异常原因的错误信息或空字符串 ("")。
Message 的文本应当完全描述错误,并且如果可能,应阐释如何纠正错误。Message 属性的值包含在 ToString 所返回的信息中。

仅当创建 Exception 时才设置 Message 属性。如果对于当前实例没有向构造函数提供消息,则系统将提供使用当前系统区域性格式化的默认消息。

给继承者的说明 在需要控制消息内容或格式的类中重写 Message 属性。应用程序代码在需要显示捕捉到的异常的信息时通常会访问此属性。 应本地化错误信息。

 

b、Source 获取或设置导致错误的应用程序或对象的名称。
public virtual string Source { get; set; }
属性值
导致错误的应用程序或对象的名称。
如果没有设置 Source,则返回产生异常的程序集的名称。

 

4)引发异常的语法
a、引发系统预定义异常的语法
throw new 预定义异常类名();
b、引发用户自定义异常的语法
class MyException:System.Exception{}
throw new MyException();

 

5)throw语句只是引发了异常,但程序中未对引发的异常进行捕获和处理,所以会产生一个未处理的异常错误。为了捕获并处理异常,需使用try...catch...finally语句。

 

2、try...catch...finally语句
为了捕获和处理异常,可以用try...catch语句。try...catch语句由一个try块后跟一个或多个catch子句构成。try块包含可能导致异常的代码,catch子句用于指定不同的异常处理程序。如果try快中的代码发生异常,则转到相应的catch子句进行处理,如果没有出现错误,则跳过catch语句。
try
{}
catch(异常对象声明){}

1)捕获系统预定义异常的catch子句
catch(预定义异常类名 变量名){}


2)捕获用户自定义异常的catch子句
catch(自定义异常类名){}

3)捕获所有类型异常的catch子句
catch(Exception ex){}

 

4)当位于try快中的程序代码发生异常时,系统会在它对应的catch子句中进行查找,是否存在与throw语句引发的异常类型相同的catch子句,如果存在,则执行该子句的异常处理程序;如果不存在,则会产生一个未处理的异常错误提示信息。
一个try块后可以跟一个或多个catch子句,但只允许有一个catch子句使用catch(Exception ex)来捕获所有类型的异常。

 

5)C#还提供了一个可选的finally语句,它与try语句一起使用时,不管代码是否发生异常,都会执行finally语句中的代码。当try,catch和finally一起使用时,try块获取并使用资源,catch块处理异常情况,而finally块则释放资源。
finally
{
  ...
}

转载于:https://www.cnblogs.com/365up/archive/2009/10/03/1577835.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值