第12章 错误调试和异常处理_第1页
第12章 错误调试和异常处理_第2页
第12章 错误调试和异常处理_第3页
第12章 错误调试和异常处理_第4页
第12章 错误调试和异常处理_第5页
已阅读5页,还剩44页未读, 继续免费阅读

下载本文档

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

文档简介

C#程序设计C#ProgrammingLanguage,SoftwareCollege,ZhongyuanUniversityofTechnology,2010-8,第1章C#概述第2章简单的C#程序设计第3章C#程序设计基础第4章控制语句第5章数组和集合第6章面向对象程序设计第7章继承和接口设计第8章Windows窗体应用程序设计第9章用户界面设计第10章图形设计第11章文件操作第12章错误调试和异常处理第13章ADO,Contents,错误调试和异常处理,第12章,12.1错误分类12.2程序调试12.3异常处理,12.1错误分类,12.1错误分类,1.语法错误语法错误也称为编译错误,是由于编写代码错误而产生的。如:Inta;ifa=3console.Writeline(b);如果错误地输入了关键字(例如,将int简写为Int)、遗漏了某些必须的语句成分等,那么C#在编译应用程序时就会检测到这些错误,并提示相应的错误信息。,语法错误、运行错误、逻辑错误,12.1错误分类,1.语法错误,在C#项目运行期间,当一个语句试图执行一个不能执行的操作时,就会发生运行错误。例如:数据溢出数组下标越界等。例如,有一个窗体myForm1上包含以下事件过程:privatevoidbutton1_Click(objectsender,EventArgse)inta=newint10;inti;for(i=0;i=20;i+)ai=2*i;,12.1错误分类,2.运行错误,12.1错误分类,2.运行错误,逻辑错误是当程序未按照预定方式执行而产生的错误。逻辑错误在编译时、运行时都检查不出来,但是达不到预期的执行结果。这种错误最难排查,需要仔细分析并借助调试工具才能查出并改正。例如:inti;for(i=0;i=20;i+)ai=2*i;/实际应为ai=3*i,12.1错误分类,3.逻辑错误,程序调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证程序正确性必不可少的步骤。,12.2程序调试,设置代码加行号:选择“工具”|“选项”|“选项”|“文本编辑器”|“C#”|“常规”选项,出现如图12.2所示的对话框。,12.2程序调试,C#提供了强大的程序调试功能,使用其调试环境可以有效地完成程序的调试工作,有助于发现运行错误。,12.2程序调试,12.2.1调试工具,(1)“调试”工具栏,12.2.1调试工具,(2)“调试”菜单,“调试”菜单“启动调试”、“逐语句”或“逐过程”命令或在代码编辑窗口中右键快捷菜单中“运行到光标处”即开始调试过程。,12.2.2如何开始调试,“启动调试”:则应用程序启动并一直运行到断点。可以在任何时刻中断执行以检查值或检查程序状态。“逐语句”或“逐过程”:应用程序启动并执行,然后在第一行中断。“运行到光标处”:则应用程序启动并一直运行到断点或光标位置,具体看是断点在前还是光标在前。可以在源窗口中设置光标位置。某些情况下,不出现中断,这意味着执行始终未到达设置光标处的代码。,断点是在程序中设置的一个位置,程序执行到些位置时中断(或暂停)。断点的作用是在调试程序时,当程序执行到断点的语句时会暂停程序的运行,供程序员检查这一位置上程序元素的运行情况,有助于定位产生错误输出或出错的代码段。,12.2.3设置断点,设置和取消断点的方法如下:方法1:用鼠标右键单击某代码行,从出现的快捷菜单中选择“断点”|“插入断点”命令(设置断点)或者“断点”|“删除断点”命令(取消断点)。方法2:将光标移至需要设置断点的语句处,然后按F9键。方法3:单击代码行的左侧。,12.2.3设置断点,12.2.3设置断点,当某行代码中出现错误时,该错误会自动添加到“错误列表”和“输出”窗口中。可以使用“错误列表”或“输出”窗口来查找代码中的错误。其操作是:双击“错误列表”或“输出”窗口中的项,则光标自动定位到代码编辑器中相应的出错行。,12.2.4定位错误,另外:在编辑代码时,会在编码错误语句相应位置下显示一条波浪线。将鼠标悬停在带有波浪线标记的代码上可显示一条消息,其中对错误进行了描述。,12.2.4定位错误,12.2.5调试过程,12.2.5调试过程,12.2.5调试过程,12.2.5调试过程,F5:先在某行设置断点,然后在调试器中按F5键运行应用程序,应用程序会在该行停止,此时可以检查任何给定变量的值,或观察执行跳出循环的时间和方式。F10:按F10键逐行单步执行代码。,12.2.5调试过程,在程序中断的状况下,将鼠标放在希望观察的执行过的语句变量上面,调试器就会自动显示执行到断点时该变量的值,如下图:,12.2.6显示调试信息,也可以在某个对象上的右键快捷菜单中选择“快速监视”命令,即可观察到对象中各个元素的值,并可修改.如右图:,局部变量窗口:可以显示局部变量的值的变化情况,12.2.6显示调试信息,调试工具的功能,12.2.6显示调试信息,12.3异常处理,异常是指在程序运行期间发生的错误或以外情况,例如除零错误或内存不足警告等,就会产生一个异常。,异常,异常处理是指解释和处理因程序错误而产生的异常。如果对于给定的异常没有异常处理程序,则程序将停止运行,并给出错误信息。,异常处理,异常处理非常重要。,12.3.1异常概述,12.3异常处理,错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象。当程序中的错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程。换句话说,错误是一个事件,而异常是该事件创建的对象。,结构化异常处理,12.3.1异常概述,12.3异常处理,.NET框架提供一种标准的错误报告机制称为结构化异常处理。这种机制依赖于应用中报告错误的异常。在.NET中,异常是一些提供错误信息的类,程序员可以用某种方式编写代码监视异常的发生,然后以一种适当的方法处理异常。,结构化异常处理,12.3.1异常概述,12.3异常处理,在VisualC#2005中处理异常时,需要在代码中关注三个部分:(1)可能导致异常的代码段(通常称为抛出异常)try块。(2)当执行代码过程中发生异常时将要执行的代码段(通常称为捕获异常)catch块。(3)异常处理后要执行的代码段(可选的,通常称为结束块)finally块。,结构化异常处理,12.3.1异常概述,12.3异常处理,try/可能产生异常的程序代码catch(异常类型1异常类对象1)/处理异常类型1的异常控制代码catch(异常类型n异常类对象n)/处理异常类型n的异常控制代码,12.3.2异常处理语句,1.trycatch语句,try块包含可能导致异常的代码段,是必选项。catch块包含异常处理代码块,为可选项,可以有一个或者多个catch块。,12.3异常处理,12.3.2异常处理语句,1.trycatch语句,try.catch.finally的执行过程为:首先执行try块包含的语句,若没有发现异常,则跳出try结构;若在try块包含的语句中发现异常,则立即转向执行catch块包含的语句,执行完后跳出try结构。,【例12.2】创建一个控制台应用程序Proj12-2项目,通过trycatch语句捕捉整数除零错误。,namespaceProj12_2classProgramstaticvoidMain(stringargs)intx=5,y=0;try/try.catch语句x=x/y;/引发除零错误catch(Exceptionerr)/捕捉该错误Console.WriteLine(0,err.Message);/显示错误信息,输出:试图除以零。,P284例12.2Proj:12-2try-catch,12.3.2异常处理语句,同trycatch语句相比,trycatchfinally语句增加了一个finally块,其作用是不管是否发生异常,即使没有catch块,都将执行finally块中的语句,也就是说,finally块始终会执行,而与是否引发异常或者是否找到与异常类型匹配的catch块无关。其余与trycatch语句相同。finally块通常用来释放资源,而不用等待由运行库中的垃圾回收器来终结对象。,12.3.2异常处理语句,2.trycatchfinally语句,12.3.2异常处理语句,2.trycatchfinally语句,try/可能导致异常的代码段catch/异常处理代码块finally/异常处理后要执行的代码段,12.3.2异常处理语句,2.trycatchfinally语句,说明:try块包含可能导致异常的代码段,是必选项。catch块包含异常处理代码块,为可选项,可以有一个或者多个catch块。finally块包含异常处理后要执行的代码段(总是会执行),也为可选项,并且只能有一个。但当存在catch块(一个或者多个),finally块可以没有,而没有catch块时,必须要有finally块。,12.3.2异常处理语句,2.trycatchfinally语句,执行过程为:首先执行try块包含的语句,若没有发现异常,则继续执行finally块包含的语句,执行完后跳出try结构;若在try块包含的语句中发现异常,则立即转向执行catch块包含的语句,然后再执行finally块包含的语句,执行完后跳出try结构。,【例12.3】创建一个控制台应用程序Proj12-3项目,说明finally块的作用。,namespaceProj12_3classProgramstaticvoidMain(stringargs)ints=10,i;inta=newint51,2,3,0,4;tryfor(i=0;ia.Length;i+)Console.Write(0,s/ai);Console.WriteLine();catch(Exceptionerr)Console.WriteLine(0,err.Message);finallyConsole.WriteLine(执行finally块);,P285例12.3Proj:12-3trycatch-finally,运行结果,throw语句用于发出在程序执行期间出现异常的信号,通常throw语句与try.catch或try.finally语句一起使用。当引发异常时,程序查找处理此异常的catch语句,也可以用throw语句重新引发已捕获的异常。1.使用内置异常类抛出异常2.自定义异常类,12.3.2异常处理语句,3.throw语句,throw语句有两种使用方式:(1)直接抛出异常;(2)在出现异常时,通过含有catch块对其进行处理并使用throw语句重新把这个异常抛出,并让调用这个方法的程序进行捕捉和处理。,12.3.2异常处理语句,3.throw语句,throw语句的使用语法格式如下:throw表达式;其中“表达式”类型必须是System.Exception或从System.Exception派生的类的类型。throw语句也可以不带“表达式”,此时只能用在catch块中,在这种情况下,它重新抛出当前正在由catch块处理的异常。,12.3.2异常处理语句,3.throw语句,在.NETFramework中定义了大量的异常基类,如下图所示的类结构图显示了其中的一些异常基类,给出了异常类大致的结构模式。,12.3.3常用的异常类,C#的常用异常类均包含在Syatem命名空间中,对于.NET类来说,一般的异常类System.Exception派生于System.Object,通常不在代码中抛出System.Exception对象,因为它无法确定错误情况的本质。在异常类层次结构图中有两个非常重要的类,它们均派生于System.Exception:(1)System.SystemExceptionSystem.SystemException异常类通常由.NET运行库抛出,也可由应用程序抛出。例如,如果.NET运行库检测到堆栈已满,就会抛出StackOverflowException;如果检测到调用方法时参数不正确,则用户可以在自己的代码中选择抛出ArgumentException或其子类。System.SystemException的子类包括表示致命错误和非致命错误的异常。,12.3.3常用的异常类,(2)System.ApplicationException。System.ApplicationException异常类是一个第三方定义的异常类。如果用户自己定义的异常覆盖了应用程序所独有的错误情况,就应当使它们直接或间接的派生于异常类System.ApplicationException。,12.3.3常用的异常类,12.3.3常用的异常类,12.3.3常用的异常类,说明:ArgumentOutOfRangeException和IndexOutOfRangeException异常类都属于OutOfRange,即下标出界,输出的错误都是“索引超出范围”。但两者是有区别的,其中ArgumentOutOfRangeException异常当调用某个方法,如果在传递给该方法的参数中至少有一个不为空引用且不包含有效值时引发;而IndexOutOfRangeException异常则是当访问索引超出数组界限的数组元素时引发,并且IndexOutOfRangeException异常类是一个不可继承的类(密封类)。,调试是编写完美程序的重要步骤和手段,异常处理是避免应用程序出错的一道“防

温馨提示

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

评论

0/150

提交评论