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

下载本文档

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

文档简介

1、1C#程序设计教程程序设计教程第第12章章 错误调试和异常处理错误调试和异常处理2本章重点本章重点 错误分类错误分类 程序调试程序调试 异常处理异常处理3错误分类错误分类 C#程序设计中的错误分成以下两类程序设计中的错误分成以下两类 语法错误语法错误 运行错误运行错误4语法错误语法错误2-1 语法错误是由于不正确地编写代码而产生语法错误是由于不正确地编写代码而产生的的 如果错误地输入了关键字(例如,将如果错误地输入了关键字(例如,将int简写为简写为Int)、遗漏了某些必须的语句成分等,那么)、遗漏了某些必须的语句成分等,那么C#在编译应用程序时就会检测到这些错误,并在编译应用程序时就会检测到

2、这些错误,并提示相应的错误信息提示相应的错误信息 例如例如5语法错误语法错误2-26代码编辑器设置代码编辑器设置2-1 为了更好的检查语法错误,可以设置为了更好的检查语法错误,可以设置C#代代码编辑器的一些特定功能码编辑器的一些特定功能 选择选择“工具工具”“选项选项”命令,在出现的命令,在出现的“选选项项”对话框中选择对话框中选择“文本编辑文本编辑器器”“C#”“常规常规”选项,出现如下图所示选项,出现如下图所示的对话框的对话框 例如,勾选例如,勾选“行号行号”则在代码的每一行前显示则在代码的每一行前显示该行的行号该行的行号 还可以通过选择还可以通过选择“C#”中的其他项来设置较复中的其他项

3、来设置较复杂的编辑功能杂的编辑功能7代码编辑器设置代码编辑器设置2-28运行错误运行错误2-1 在在C#项目运行期间,当一个语句试图执行项目运行期间,当一个语句试图执行一个不能执行的操作时,就会发生运行错一个不能执行的操作时,就会发生运行错误误 例如,数据溢出、数组下标越界等例如,数据溢出、数组下标越界等 例如,有一个窗体例如,有一个窗体myForm1上包含以下事上包含以下事件过程件过程private void button1_Click(object sender, EventArgs e) int a=new int10; int i; for(i = 0;i=20;i+) ai = 2

4、* i; /当运行该窗体时,会出现错误提示框当运行该窗体时,会出现错误提示框9运行错误运行错误2-210程序调试程序调试 C#提供了强大的程序调试功能,使用其调提供了强大的程序调试功能,使用其调试环境可以有效地完成程序的调试工作,试环境可以有效地完成程序的调试工作,从而有助于发现运行错误从而有助于发现运行错误11调试工具调试工具“调试调试”工具栏(工具栏(“视图视图”“工具栏工具栏”“调调试试”)“调试调试”菜菜单单12如何开始调试如何开始调试2-1 从从“调试调试”菜单中选择菜单中选择“启动调试启动调试”、“逐语句逐语句”或或“逐过程逐过程”命令,或者在代命令,或者在代码编辑窗口中,单击鼠标

5、右键,然后从快码编辑窗口中,单击鼠标右键,然后从快捷菜单中选择捷菜单中选择“运行到光标处运行到光标处”命令,即命令,即开始调试过程开始调试过程 如果选择如果选择“启动调试启动调试”命令,则应用程序启动命令,则应用程序启动并一直运行到断点,可以在任何时刻中断执行并一直运行到断点,可以在任何时刻中断执行以检查值或检查程序状态以检查值或检查程序状态 若选择若选择“逐语句逐语句”或或“逐过程逐过程”,应用程序启,应用程序启动并执行,然后在第一行中断动并执行,然后在第一行中断13如何开始调试如何开始调试2-2 如果选择如果选择“运行到光标处运行到光标处”命令,则应用程序命令,则应用程序启动并一直运行到断

6、点或光标位置,具体看是启动并一直运行到断点或光标位置,具体看是断点在前还是光标在前;某些情况下,不出现断点在前还是光标在前;某些情况下,不出现中断,这意味着执行始终未到达设置光标处的中断,这意味着执行始终未到达设置光标处的代码代码14设置断点设置断点2-1 断点是在程序中设置的一个位置,程序执行到些断点是在程序中设置的一个位置,程序执行到些位置时中断(或暂停)位置时中断(或暂停) 断点的作用是在调试程序时,当程序执行到断点的语断点的作用是在调试程序时,当程序执行到断点的语句时会暂停程序的运行,供程序员检查这一位置上程句时会暂停程序的运行,供程序员检查这一位置上程序元素的运行情况,这样有助于定位

7、产生错误输出或序元素的运行情况,这样有助于定位产生错误输出或出错的代码段出错的代码段 设置和取消断点的方法如下设置和取消断点的方法如下 方法方法1:用鼠标右键单击某代码行,从出现的快捷菜单:用鼠标右键单击某代码行,从出现的快捷菜单中选择中选择“断点断点”“插入断点插入断点”命令(设置断点)或者命令(设置断点)或者“断点断点”“删除断点删除断点”命令(取消断点)命令(取消断点) 方法方法2:将光标移至需要设置断点的语句处,按:将光标移至需要设置断点的语句处,按F9键键15设置断点设置断点2-216定位错误定位错误 当某行代码中出现错误时,该错误会自动当某行代码中出现错误时,该错误会自动添加到添加

8、到“错误列表错误列表”和和“输出输出”窗口中窗口中 可以使用可以使用“错误列表错误列表”或或“输出输出”窗口来查找窗口来查找代码中的错误,其操作是代码中的错误,其操作是 通过通过“视图视图”菜单的相应菜单项打开菜单的相应菜单项打开“错误列表错误列表”或或“输出输出”窗口,双击窗口,双击“错误列表错误列表”或或“输出输出”窗窗口中的项,则光标自动跳到代码编辑器中相应的出口中的项,则光标自动跳到代码编辑器中相应的出错行错行 有时会在错误代码下显示一条波浪线,将有时会在错误代码下显示一条波浪线,将鼠标悬停在带有波浪线标记的代码上可显鼠标悬停在带有波浪线标记的代码上可显示一条消息,其中对错误进行了描述

9、示一条消息,其中对错误进行了描述17调试过程调试过程 先在某行设置断点,然后在调试器中按先在某行设置断点,然后在调试器中按F5键运行应用程序,应用程序会在断点处停键运行应用程序,应用程序会在断点处停止,此时可以检查任何给定变量的值,或止,此时可以检查任何给定变量的值,或观察执行跳出循环的时间和方式观察执行跳出循环的时间和方式 按按F10键(逐过程)或键(逐过程)或F11键(逐语句)可键(逐语句)可以逐行执行代码以逐行执行代码 两种是有区别的,见两种是有区别的,见Proj12-1的运行效果的运行效果18显示调试信息显示调试信息2-1 在在C#程序中断的状况下,可以将鼠标放在程序中断的状况下,可以

10、将鼠标放在希望观察的执行过的语句变量上面,调试希望观察的执行过的语句变量上面,调试器就会自动显示执行到断点时该变量的值,器就会自动显示执行到断点时该变量的值,如下图如下图19显示调试信息显示调试信息2-2 单击单击“调试调试”“窗口窗口”“局部变量局部变量”,可以打开可以打开“局部变量局部变量”窗口,在该窗口中窗口,在该窗口中可以直接看到各个变量的值可以直接看到各个变量的值 “局部变量局部变量”窗口具有跟踪变量的功能,窗口具有跟踪变量的功能,当按当按F11键逐语句运行程序时,可以看到其键逐语句运行程序时,可以看到其中的变量值随着程序的运行发生变化中的变量值随着程序的运行发生变化 例如,例如,P

11、roj12-1的的Form1窗体窗体20异常处理异常处理 异常处理是一种对程序运行发生错误和意异常处理是一种对程序运行发生错误和意外情况的处理机制外情况的处理机制 通过异常处理可以保证程序尽可能正常运通过异常处理可以保证程序尽可能正常运行行21异常处理语句异常处理语句3-1 try catch语句语句 try /可能产生异常的程序代码可能产生异常的程序代码 catch(异常类型异常类型1异常类对象异常类对象1) /处理异常类型处理异常类型1的异常控制代码的异常控制代码 catch(异常类型异常类型n异常类对象异常类对象n) /处理异常类型处理异常类型n的异常控制代码的异常控制代码 22try

12、catch语句示例语句示例 【例【例12.2】 创建一个控制台应用程序创建一个控制台应用程序Proj12-2项目,通过项目,通过try catch语句捕捉语句捕捉整数除零错误整数除零错误namespace Proj12_2 class Program static void Main(string args) int x = 5,y = 0; try /try.catch语句语句 x = x/y; /引发除零错误引发除零错误 catch (Exception err) /捕捉该错误捕捉该错误 Console.WriteLine(0,err.Message); /显示错误信息显示错误信息 输出:

13、试图除以零。输出:试图除以零。23异常处理语句异常处理语句3-2 try catch finally语句语句 同同try catch语句相比,语句相比,try catch finally语句增加了一个语句增加了一个finally块,其作用是不块,其作用是不管是否发生异常,即使没有管是否发生异常,即使没有catch块,都将执块,都将执行行finally块中的语句,也就是说,块中的语句,也就是说,finally块始块始终会执行,而与是否引发异常或者是否找到与终会执行,而与是否引发异常或者是否找到与异常类型匹配的异常类型匹配的catch块无关,其余与块无关,其余与try catch语句相同语句相同

14、finally块通常用来释放资源,而不用等待由垃块通常用来释放资源,而不用等待由垃圾回收器来终结对象圾回收器来终结对象24try catch finally语句示例语句示例 【例【例12.3】 创建一个控制台应用程序创建一个控制台应用程序Proj12-3项目,说明项目,说明finally块的作用块的作用namespace Proj12_3 class Program static void Main(string args) int s = 10, i; int a = new int5 1, 2, 3, 0, 4 ; try for (i = 0; i a.Length; i+) Conso

15、le.Write(0 , s / ai); Console.WriteLine(); catch (Exception err) Console.WriteLine(0, err.Message); finally Console.WriteLine(执行执行finally块块); 25异常处理语句异常处理语句3-3 throw语句语句 throw语句有两种使用方式语句有两种使用方式 直接抛出异常直接抛出异常 在出现异常时,通过在出现异常时,通过catch块对其进行处理并使用块对其进行处理并使用throw语句语句重新把这个异常抛出并让调用这个方法的程序进行捕捉和处重新把这个异常抛出并让调用这个

16、方法的程序进行捕捉和处理理 throw语句的使用语法格式如下语句的使用语法格式如下 throw 表达式表达式; throw语句也可以不带语句也可以不带“表达式表达式”,此时只能用在,此时只能用在catch块中,块中,在这种情况下,它抛出当前正在由在这种情况下,它抛出当前正在由catch块处理的异常块处理的异常26throw语句示例语句示例2-1 【例【例12.4】 创建一个控制台应用程序创建一个控制台应用程序Proj12-4项目,说明项目,说明throw语句的作用语句的作用using System;using System.Text;namespace Proj12_4 class Progr

17、am static void fun1() int x = 5, y = 0; try x = x / y; /引发除零错误引发除零错误 catch (Exception err) /捕捉该错误捕捉该错误 Console.WriteLine(fun1:0,err.Message); throw; static void fun2() Exception err = new Exception(抛出自定义异常抛出自定义异常); Console.WriteLine(fun2:0, err.Message); throw err; 27throw语句示例语句示例2-2 static void Mai

18、n(string args) try fun1(); catch (Exception err) Console.WriteLine(Main1:0, err.Message); try fun2(); catch (Exception err) Console.WriteLine(Main2:0, err.Message); 28常用的异常类常用的异常类 C#的常用异常类均包含在的常用异常类均包含在System命名空间中,主命名空间中,主要有要有 Exception 所有异常类的基类所有异常类的基类 DivideByZeroException 当试图除以零时抛出当试图除以零时抛出 IndexOutOfRangeEx

温馨提示

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

评论

0/150

提交评论