第8章 调试、测试和异常处理.ppt_第1页
第8章 调试、测试和异常处理.ppt_第2页
第8章 调试、测试和异常处理.ppt_第3页
第8章 调试、测试和异常处理.ppt_第4页
第8章 调试、测试和异常处理.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章,调试、测试和异常处理,2,目标,理解如何调试应用程序和排除错误 在程序中进行错误捕获和错误处理,3,简介,应用程序开发,可以安装在客户端机器上,应用程序必须,无错误 无故障 可靠 稳健,查找和排除错误或故障称为调试,4,8.1调试,计算机化的计费系统,在事物处理过程中,系统显示错误消息,必须重新输入全部信息,在部署应用程序前必须先对其进行调试,5,8.1.1错误类型,错误类型,语法错误,逻辑错误,运行时错误,语法错误、缺少括号等 在编译时确定 易于确定,错误的算法导致错误结果、公式错误等 在执行过程中确定 难以调试,内存泄漏、以零作除数、异常 在运行时确定 难以调试,6,8.1.2调试

2、过程,调试器,观察程序的运行时行为,跟踪变量的值,确定语义错误的位置,查看寄存器的内容,查看内存空间,7,调试过程 5-2,暂停,可在代码中插入“断点”,以便在特 定行处暂停执行该代码,8,调试过程 5-3,右键单击所需代码行,以设置断点,选择“插入断点”,9,调试过程 5-4,选择“调试” “继续”以便继续执行程序,10,调试模式,.NET 集成开发环境,Debug模式(调试):可用来重复编译应用程序和排除错误,直至能够成功运行。,Release模式(发布):当应用程序无需重复编译即可发布时,再改成发布模式编译,然后发布,11,8.1.2 VS.NET 中的调试工具,“局部变量”窗口:显示当

3、前作用域下的变量并跟踪他们的值,控制权一旦转移到其他方法,则系统会自动清除列出的变量,显示当前方法的变量。,12,“监视”窗口:,“监视”窗口:用计算变量和表达式的值,并跟踪他们的变化。,13,“快速监视”对话框:,“快速监视”对话框:快速计算变量和表达式的值。,14,“即时”窗口:,“即时”窗口:用于检查变量的值,给变量赋值以及运行一行代码。要查找变量的值,必须在变量名前加“?”。,15,Visual Studio .NET 调试器的功能,跨语言调试 调试使用 .NET 框架编写的应用程序以及 Win32 本机应用程序 加入正在运行的程序 调试多个程序,16,8.2异常,网上银行,某学生小王

4、转帐5000到其朋友小李的帐面上,0,4500,数据库,系统将查询发送到数据库中,tranfer_money() sendquery(); . .,余额 4500-5000,程序崩溃,拒绝交易,“C#”中的异常,17,1.异常(Exception),异常(Exception):异常是当程序发生错误时产生的一种信号。 在.Net广泛使用的原因:除数为0;数组下标出界,或没用引用,文件找不到 举例: string s; int i; s=textBox1.Text; i=int.Parse(s);,18,2.异常类型,每种异常类型都是一个类。所有异常派生于基类 基类 Exception 下存在两大

5、类异常: System. SystemException :预定义公共语言运行库异常类。 System. ApplicationException:用户定义的应用程序异常类。 可以通过异常类名判断是哪类异常: ArithmeticException:数学计算错误 DivideByZeroException:被零除 FormatException:参数的格式不正确,19,异常类,20,异常类的常用属性,21,3.异常处理,异常处理: 异常处理是指处理程序运行时出现异常的方法。 以前用代码号(如C)来描述异常,C#则用异常类( Exception)对象来处理异常. 异常处理方式 异常的产生:通过抛

6、出(throwing)一个该异常类的对象实现 异常的捕获:通过catch该异常类的对象实现 异常处理有try-catch方法,22,异常处理举例,int i=0; try i = Convert.ToInt32(textBox1.Text); /若textBox1.Text值为非int则捕获异常,执行catch的代码进行异常处理 catch (Exception ex) MessageBox.Show(ex.Message); ,23,4.异常处理语句,在 C# 程序中,引发异常共有以下两种方式,使用语句或表达式在执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常 使用显式 t

7、hrow 语句来引发异常。在此情况下,控制权将无条件转到处理异常的部分代码,Try.Catch.Finally,24,1) try语句,C#使用try语句来捕捉和处理程序执行过程中产生的异常。try语句提供一种在执行一个语句块时能够抓住异常的机制. 格式: try 程序代码块; /我们应该把有可能发生异常的该代码放置在try中. catch(Exception ex) 异常处理代码块;/捕捉到异常后的处理方法放置到catch中。 finally 无论是否发生异常,均要执行的代码块; ,25,举例:,int i=0; try i = Convert.ToInt32(textBox1.Text);

8、 catch (FormatException ex)/字符格式异常 MessageBox.Show(ex.Message); catch (Exception ex)/处理系统中的任何一种异常 MessageBox.Show(ex.Message); finally MessageBox.Show(测试完毕); ,26,try语句说明,try语句通常包含try子句、catch子句和finally子句,总共有三种可能的try语句形式: trycatch:后面跟有一个或多个catch语句块的try语句块。 tryfinally:后面跟有一个finally的try语句块。 trycatchfina

9、lly:后面既跟有catch又跟有finally的try语句块。 try子句包含可能发生异常的语句块,catch子句包含用来处理或者响应异常的语句块。 catch子句执行后,程序将继续执行。若要处理异常后中止程序,则须用return、throw或exit. finally子句,无论try子句是否引发异常,该子句包含的语句块总被执行,因此,finally子句可以用来进行一些必要的清除操作,如释放对象占用的资源等。,27,2)throw语句,Throw:人工抛出异常 Throw格式1:throw ; 说明: 带有表达式的throw语句抛出的异常是在计算这个表达式时产生的 表达式须是System.E

10、xception类型值,或从Sytem.Exception继承而来的类类型。如果计算表达式的结果是null,一个NullReferenceException异常将会被抛出。 格式2:throw; 不带表达式的throw语句只能用在一个catch语句块中,在一个catch块中,可以用不含表达式的throw语句将该catch块捕捉到的异常再次抛出,对于异常变量的分配不会改变再次抛出的异常。 异常传播:当一个异常被抛出以后,程序将控制权转移给try语句中第一个能够处理该异常的catch子句。这个从异常抛出到控制转移给合适的异常处理语句的过程就叫做异常传播。,28,throw举例,try if (te

11、xtBox1.Text=) throw new Exception(不能为空); catch (Exception ex) MessageBox.Show(ex.Message); ,29,5.自定义异常类创建,1.创建一个ApplicationException子类,空值异常 public class MyException : System.ApplicationException / 重写构造函数 public MyException():base() /Message属性的重载 public override string Message get return 不允许为空值 ; ,30

12、,引发自定义异常,2.在程序方法中可以通过throw语句引发异常 if (textBox1.Text = ) throw new MyException(); ,31,示例-建立自定义异常,using System; public class EmailCheckException:ApplicationException public string _mes; /重写构造函数 public EmailCheckException():base() _mes = null; public EmailCheckException(string message):base() _mes = mes

13、sage.ToString(); public EmailCheckException(string message, Exception myNew):base(message,myNew) _mes = message.ToString(); /Message属性的重载 public override string Message get return 格式错误; ,32,示例-throw引发异常,private bool InfoSave ( string email) string subStrings = email.Split(); /如果输入的Email不是被“”字符分割成两段,

14、则抛出Email错误异常 if(subStrings.Length != 2) throw new EmailCheckException(); else int index = subStrings1.IndexOf(.); /查找被“”字符分成的两段的后一段中“.”字符的位置,没有“.” /或者“.”字符是第一个字符,则抛出EmailErrorException异常 if(index = 0) throw new EmailCheckException(); /如果“.”字符是最后一个字符,抛出EmailErrorException异常 if(subStrings1subStrings1.Length -1 = .) throw new EmailCheckException(); return true; ,33,示例-Catch自定义异常,private void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论