调试与异常处理

上传人:jiups****uk12 文档编号:56891412 上传时间:2018-10-16 格式:PPT 页数:29 大小:962KB
返回 下载 相关 举报
调试与异常处理_第1页
第1页 / 共29页
调试与异常处理_第2页
第2页 / 共29页
调试与异常处理_第3页
第3页 / 共29页
调试与异常处理_第4页
第4页 / 共29页
调试与异常处理_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《调试与异常处理》由会员分享,可在线阅读,更多相关《调试与异常处理(29页珍藏版)》请在金锄头文库上搜索。

1、C#2008程序设计基础案例教程,第五章 调试与异常处理,程序中的错误类型,1语法错误 语法错误是指在程序代码中,存在不符合Visual C# 2008语法规则的语句而产生的错误。,一、程序中的错误类型,2运行错误 运行错误是指程序中的语句本身无语法错误的,但是这些语句在运行时无法正确执行,从而导致程序发生错误。,intA=new int5;int i;for (i = 0; i = 5; i+)Ai = i * i;,一、程序中的错误类型,3逻辑错误,在程序设计中,有时会出现这样一种情况:程序在编辑和编译时,没有发现任何语法错误,程序也能正常运行和正常退出,但程序就是不能实现要求的功能。在这

2、种情况下,通常就是程序中出现了逻辑错误。,5.1 程序调试,程序员在编码过程中经常犯一些错误,例如算术运算时不小心使计算结果超出结果变量数据类型的有效范围(这种情况称为溢出)。当程序运行时出现了溢出情况,而恰好又位做处理,那么程序将因出现错误而被关闭。但是程序中处理了那么多数据,程序员如何知道错误出现在哪里呢?这就需要使用Visual Studio2008的调试功能。,5.1.2 案例步骤,设置断点为了能让程序在执行语句时程序能暂停,我们可以在这条语句上设置断点,设置中断有以下两种方法: 使光标停在语句所在行,然后按快捷键F9或者选择调试菜单的“切换断点”命令。 用鼠标单击该行的前边界,如图所

3、示。,单击这里,5.1.2 案例步骤,启动调试单击工具栏上的“启动调试”按钮或按下F5启动调试,选择备忘录功能,程序运行到第一个断点处暂停,注意断点语句此时还未执行。“调试”菜单提供了3个继续执行代码的命令: 逐语句 逐过程 跳出,5.1.2 案例步骤,查看变量的值当程序中断时,将鼠标停在变量上1-2秒,将悬浮显示出变量的当前值,如下图所示:,5.1.3 案例拓展,若断点在循环内部,则每循环一次都要中断一次,若循环次数庞大,将给调试带来不便。 可以考虑为断点设置条件,在断点上单击鼠标右键,弹出如图所示菜单:,断点设置,命中次数在菜单中选择“命中次数”命令,弹出“断点命中次数”窗口(见下图),在

4、下拉框中选择“中断,条件是命中次数等于”,文本框中输入50,点击确定后,重新启动调试,发现循环内断点在循环到第50次时才中断,而不是每次都中断。,断点设置,断点其他设置 位置:可以设置断点在文件的具体位置。 条件:条件是一个表达式,它确定断点是命中还是跳过。当调试器到达该断点时,它会计算条件的值。只有当条件满足时,断点才会命中。可以在某个位置断点处设置条件,只有当条件为真时,才会中断执行。 命中次数:它跟踪断点的命中次数。默认情况下,每次命中断点时断点都中断代码的执行。您可以更改此行为,以便仅当命中次数等于或超过指定值或者仅当命中次数为给定值的倍数时,断点才中断代码。 通过筛选器,可以将断点设

5、置在指定的计算机、进程和线程上。在调试运行于多个处理器上的应用程序时,筛选器非常有用。,调试窗口,监视窗口 只有在中断状态下可以使用该窗口。可以在监视窗口中监视变量或表达式,如图所示。可以在监视窗口的空行中直接输入要监视的变量或表达式。当代码单步执行时,监视变量或表达式的值若发生变化将以红色字体显示。,调试窗口,快速监视窗口中断时可以选中变量或表达式后右键选择“快速监视”来使用快速监视对话框进行监视,如下图所示:,调试窗口,即时窗口即时窗口用于调试和计算表达式、执行语句、输出变量值等。它使您得以在调试期间输入表达式,由开发语言对其进行计算或执行。若要显示“即时”窗口,请打开要编辑的项目,然后从

6、“调试”菜单中选择“窗口”,再选择“即时”。,调试窗口,命令窗口“命令”窗口用于直接在 Visual Studio 集成开发环境 (IDE) 中执行命令或别名。可以执行菜单命令和不在任何菜单上显示的命令。若要显示“命令”窗口,请从“视图”菜单中选择“其他窗口”,再选择“命令窗口”。,调试窗口,自动窗口“自动”窗口用于监视程序运行时最后访问的变量。,调试窗口,局部变量窗口“局部变量”窗口监视当前执行方法中的变量。与“自动”窗口相比,“局部变量”窗口列出了更多的变量。,5.2 错误与异常处理,错误的出现并不总是编写应用程序的人的原因,有时应用程序会因为终端用户的操作而发生错误,例如删除只读文件,数

7、据库不存在等。无论如何,我们都应预测应用程序和代码中出现的错误。C#处理错误的机智为每种错误提供定制的处理,并把识别错误的代码与处理错误的代码分离开来,这种机制称为异常处理。,Try-catch-finally 异常处理,trycatchfinally语句 格式:try 语句组1; /程序中需要执行的语句catch(异常1) /发生了“异常1”指定的异常 语句组2; /执行该异常处理 catch(异常n) /发生了“异常n”指定的异常 语句组n; /执行该异常处理finally /必做的自理 语句组n+1; /该语句块一定被执行,无论是否产生异常 功能:执行“语句组”中的语句,如果产生异常,则

8、系统自动查找距离可以处理这个异常的语句最近的catch语句,并且在运行时决定异常类型。,Try-catch-finally 异常处理,trycatchfinally语句 说明: (1)当发生异常时,应寻找一个最佳的catch块。当异常发生时,选择哪一个catch块将取决于异常的类型是否匹配,一个具体的catch块将比一个公共的catch块优先。如在try块中发生了一个除数为0的异常,有两个catch块,一个是捕获所有异常,一个是专门捕获除数为0的异常,此时应执行“专门捕获除数为0的异常”的catch块。 (2)可以省略catch块。由于没有catch块,程序执行过程中发生异常,如果有final

9、ly块则将直接执行该块中的代码,否则将直接中断。 (3)finally块也可以省略。但catch块和finally块不能同时省略。,异常处理,程序的异常处理分为3种不同类型的代码块: try块包含的代码组成了程序的正常操作部分,但可能遇到某些严重的错误。 catch块包含的代码处理各种错误,这些错误是try块中的代码执行时遇到的。 finally块包含的代码清理资源或执行要在try块或catch块末尾执行的其他操作。无论是否产生异常,都会执行finally块。finally块是可选的。如果不需要清理代码,就不需要包含此块。,异常处理执行步骤,步骤如下: 程序流进入try块。 如果没有错误发生,

10、就会正常执行操作。当程序流离开try块后,即使什么也没有发生,也会自动进入finally块(第5步)。但如果在try块中程序检测到一个错误,程序流就会跳转到catch块(下一步)。 在catch块中处理错误。 在catch块执行完后,程序流会自动进入finally块。 执行finally块。,异常处理结构变种,可以省略finally块 可以提供任意多个catch块,处理不同类型的错误 可以省略catch块尽管catch和finally是可选的,但不能同时省略。可以使用throw语句发出在程序执行期间出现反常情况(异常)的信号,使用方法为:throw new 异常类();可以在catch块中使用

11、无表达式的throw语句,在此情况下,该语句会再次引发当前正由 Catch 语句处理的异常。可以使用异常处理结构处理throw抛出的异常。,5.1.3 案例拓展,.NET提供了许多预定义的异常类,如下图所示:,异常类,通常使用异常对象的Message属性获取异常信息,在System.Exception中还有许多其他属性,如下表:,捕获多个异常,一个try结构可能存在多个catch块,这是由于try块中的代码可能引发多种类型的异常,使用多个catch可以捕获各种异常。 例如:tryint index = Convert.ToInt32(Console.ReadLine();Console.Wri

12、teLine(aindex);catch (FormatException ex)Console.WriteLine(“应该输入数字:“ + ex.Message);catch (IndexOutOfRangeException ex)Console.WriteLine(“索引超出范围:“ + ex.Message);catch (Exception ex)Console.WriteLine(“其他异常发生:“ + ex.Message);,异常处理机制,与switch语句的执行方式类似,找到第一个匹配的异常并处理后将不再寻找匹配。 如果产生的异常未找到匹配,.NET运行库会捕获它。代码的执行

13、会立即中断,并给用户显示一个对话框,说明代码没有处理异常,并给出.NET运行库能检索到的异常信息。 因此,应捕获尽可能多的异常,并以合理的方式处理它们。,try的嵌套,异常的一个特性是try块可以嵌套,如下所示: try / Point Atry/ Point Bcatch/ Point Cfinally/ clean up / Point D catch / error handling finally / clean up ,try嵌套处理机制,在每个块中,.NET运行库顺序执行try块,查找合适的处理程序,在每个步骤中,当退出catch块后,就会执行对应finally块中的清理代码,但不执行finally块外部的代码。若内部产生的异常内部无法处理则抛出到外部的catch块处理,直到找到合适的catch处理程序,并执行为止。 注意:在catch和finally块中抛出异常是合理的。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号