




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LOGO C#程序设计程序设计 第第5章章 调试和错调试和错误处理误处理目录目录5.1 常见错误类型常见错误类型5.2 程序调试程序调试5.4 本章小结本章小结 5.3 错误处理错误处理程序设计过程中错误的主要类型有设计时错误、语法错误、运行时错误、逻辑错误。这4种错误分别说明如下。 设计时错误:发生在程序设计阶段。如用户在程序中使用了不合法的赋值或定义,VS 2008能够发现这类错误,并将错误信息显示在“错误列表”窗口中。 语法错误:也称为编译时错误。语法错误常见的是发生在初学者身上,如关键字拼写错误,变量没有定义等,这种错误在编译阶段程序可以自动跳到错误之处,非常容易修改。 运行时错误:运
2、行时错误是用户在执行应用程序时,因为输入类型不符或者是被除数为0或者数组越界等造成的,这个错误会造成程序的中断,在C#中我们称之为异常(exception)。可以使用 try-catch-finally语句解决。 逻辑错误:逻辑错误是最困难的错误,尤其在大型程序设计中最为明显。程序在执行过程中不提示错误信息,也会有运行结果,但是结果不符合逻辑,或者是跟我们预期的不一样。目录目录5.1 常见错误类型常见错误类型5.2 程序调试程序调试5.4 本章小结本章小结 5.3 错误处理错误处理无论多么优秀的程序员,程序总会出现一些问题,出色的程序员会找出其中一部份错误,并更正它们。程序调试就是将编好程序后
3、,用各种手段进行查错和排错的过程。在程序开发过程中程序编码和调试是一个持续的循环过程,只有在对程序进行了彻底的测试后才能交付最终用户使用。按照调试技术的使用方法可以分为两类:非中断模式和中断模式。 用如下两个命令在程序运行期间把文本写入“输出”窗口: Debug.WriteLine() Trace.WriteLine() 这两个命令的使用方法几乎完全相同,但有一个关键的区别:第一个命令仅在调试模式下运行,而第二个命令还可用于发布程序(Release版本)。实际上,Debug.WriteLine()命令甚至不能编译为可发布的程序,在发布版本中,该命令会消失 需要导入命名空间:using Syst
4、em.Diagnostics; 猴子吃桃问题猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。 猴子吃桃问题猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。using System;using System.Diagnostics;class program
5、 static void Main() int sum = 1; for (int i = 9; i = 1; i-) sum = (sum + 1) * 2; Console.WriteLine(sum); Console.ReadKey(); using System;using System.Diagnostics;class program static void Main() int sum = 1; for (int i = 9; i = 1; i-) sum = (sum + 1) * 2; Debug.WriteLine(第+i.ToString()+天:+sum); Cons
6、ole.WriteLine(sum); Console.ReadKey(); 猴子吃桃问题把信息输出到“输出”窗口中的另一种方法是使用跟踪点。这是VS的一个功能,而不是C#的功能,但其作用与使用Debug.WriteLine()的作用相同。实际上,它是输出调试信息但不修改代码的一种方式。把光标放在要插入跟踪点的代码行上,点击右键,选择“断点|插入跟踪点”,跟踪点会在执行该行之前被处理。在打开的“命中断点时”对话框中,在“打印消息”文本框中键入要输出的文本,如果要输出变量的值,应把变量名放在花括号中。中断模式下的调试技术,需要先中断程序的执行,然后再进行调试。常用的技术和工具有: 设置断点使用断
7、言监视变量的值逐语句与逐过程 即时/命令窗口 “调用堆栈”窗口 断点是源代码中自动进入中断模式的一个标记。添加断点的方式与添加跟踪点类似:只需右击要添加断点的代码行,从弹出的快捷菜单中选择“断点”|“插入断点”命令即可。使用断点进入中断模式,可以配置为以下几种情况:在遇到断点时,立即进入中断模式在遇到断点时,如果布尔表达式的值为true,就进入中断模式遇到某断点一定的次数后,才进入中断模式在遇到断点时,与从上次遇到断点时相比变量的值发生了变化,就进入中断模式监视可以用来跟踪变量或者表达式的值的变化,这对于程序员调试程序、跟踪变量与查找错误都非常有用 与监视变量相关的窗口一个有3个:自动窗口、局
8、部变量和监视n(其中n 从1到4),这几个窗口都只有在调试状态下才可见 。“自动窗口”显示在当前语句和先前语句中使用的变量。 “局部变量”窗口显示当前上下文的变量。“监视”窗口可以计算变量和表达式并保留结果。监视窗口的一个优点是,它们可以显示变量在断点之间的变化情况。新值显示为红色而不是黑色,所以很容易看出哪个值发生了变化 “调试”工具栏中的 图标控制了中断模式下的程序流。它们依次是:逐语句:执行并移动到下一个要执行的语句上逐过程:同上,但不进入嵌套的代码块(碰到函数时,不进入函数,把函数调用当成一条语句执行)跳出:执行到代码块的末尾,在执行完该语句块后,重新进入中断模式 通常,单步执行可以与
9、监视同时使用,即,单步执行代码,当执行到有错误的代码时,监视变量的值,查看什么地方出错。即时/命令窗口可以通过“视图”|“其他窗口”|“命令窗口”菜单打开,该窗口可以在运行应用程序的过程中执行命令。这两个窗口在内部是链接在一起的,可以在它们之间切换:输入命令immed,可以从命令窗口切换到即时窗口,输入cmd可以从即时窗口切换到命令窗口 “即时窗口”用于在设计时调试和计算表达式、执行语句、输出变量值等。它使您得以在调试期间输入表达式,由开发语言对其进行计算或执行。“命令窗口”用于直接在 Visual Studio 集成开发环境 (IDE) 中执行命令或别名。可以执行菜单命令和不在任何菜单上显示
10、的命令。 通过这个窗口可以显示正在执行的过程、程序和方法。该窗口描述了程序是如何执行到当前位置的。第一个程序运行时,该程序名列在“调用堆栈”窗口中。如果调用了第一个程序中的子程序或子过程,同时,又在执行第二个程序,两个程序的名字均显示在“调用堆栈”窗口中,依此类推。 “调用堆栈”窗口显示每个函数的名称和编写它所用的编程语言。函数或过程名可能伴随有可选信息,如模块名、行号、字节偏移量以及参数的名称、类型和值。目录目录5.1 常见错误类型常见错误类型5.2 程序调试程序调试5.4 本章小结本章小结 5.3 错误处理错误处理 异常是在运行期间代码中产生的错误,或者由代码调用的函数产生的错误。 异常可
11、能来自系统本身,如内在不足、磁盘出错、网络连接中断、数据库无法使用。也有可能来自用户,如非法输入等。一但发生这些事件,程序都将无法正常运行。 异常处理就是对这些事件的处理方法,如果出现异常而没有异常处理程序,则程序将停止执行。异常处理是必不可少的,它可以防止程序处于非正常状态,并可根据不同类型的错误来执行不同的处理方法。C#的异常机制必须要保证捕获到这些错误并且能够处理异常 要想捕获异常,必须把可能产生异常的语句放在受保护的代码块中,这个代码块由try关键字和一对来创建 ,并用catch定义异常处理程序try可能出错的代码catch (Exception e)异常处理代码 例:从键盘输入两个操
12、作数,分别求加法和减法运算。using System;class program static void Main() Console.Write(请输入第一个操作数:); float a = Convert.ToSingle(Console.ReadLine(); Console.Write(请输入第二个操作数:); float b = Convert.ToSingle(Console.ReadLine(); Console.WriteLine(0+1=2, a, b, a + b); Console.WriteLine(0-1=2, a, b, a - b); Console.ReadKe
13、y(); using System;using System.Diagnostics;class program static void Main() try Console.Write(请输入第一个操作数:); float a = Convert.ToSingle(Console.ReadLine(); Console.Write(请输入第二个操作数:); float b = Convert.ToSingle(Console.ReadLine(); Console.WriteLine(0+1=2, a, b, a + b); Console.WriteLine(0-1=2, a, b, a
14、- b); catch (Exception e) Console.WriteLine(出错了!); Console.ReadKey(); 在C#中,所有的异常必须用一个System.Exception类或者其派生类的实例表示。类System.Exception 是所有异常的基本类型。这个类有一些值得注意的属性,这些属性所有异常都有: 只读属性Message:该属性包含一个可以被读取的异常信息的描述。 只读属性InnerException:该属性包含这个异常的“内部异常”。如果不是null,就指出当前的异常是作为对另外一个异常的回答而被抛出。产生当前异常的异常可以在InnerException
15、 属性中得到。 异常在System命名空间中定义,大多数异常的名称清晰地说明了该异常发生的原因。int a=1,2,3,4;Int b=a4;这段代码将产生异常,异常的名称叫做System.IndexOutOfRangeException 当试图用整数类型数据除以零时抛出:System.DivideByZeroException 当试图用new来分配内存而失败时抛出:System.OutofMemoryException try语句提供了一种在块语句执行过程中捕获异常的机制。在C#中,有三种形式的try语句:跟有一个或者多个catch块语句;跟有一个finally块语句;跟有一个或者多个cat
16、ch块语句和一个finally语句使用catch语句块时,需要注意以下几点:当catch语句中指定一个类类型时,此类必须为System.Exception或者由System.Exception派生出的类型。当一个catch语句同时指定了类类型和变量标识符时,即声明了一个异常类型的变量。异常变量相当于一个只读的局部变量,它的有效区间为catch块语句内部。在catch块语句执行过程中,异常变量代表当前正被处理的异常。 不同的错误可能会抛出不同类型的异常。为了捕捉不同类型的异常,我们可以使用多个catch语句。将所有catch语句依次列出。 一个异常发生之后,将运行公共语言运行库发现的第一个匹配的
17、异常处理程序,其他处理程序会被忽略。 异常采用一种称为继承层次结构(inheritance hierarchy)的家族来进行组织。Exception是所有异常的“始祖”。假如在程序中指定捕捉Exception,那么处理程序将捕捉可能发生的任何一个异常。 try Console.Write(请输入第一个操作数:); int a = Convert.ToInt32(Console.ReadLine(); Console.Write(请输入第二个操作数:); int b = Convert.ToInt32(Console.ReadLine(); Console.WriteLine(0+1=2, a,
18、 b, a + b); Console.WriteLine(0-1=2, a, b, a - b); Console.WriteLine(01=2, a, b, a * b); Console.WriteLine(01=2, a, b, a / b); catch (FormatException e) Console.WriteLine(输入的操作数不是整数!); catch (DivideByZeroException e) Console.WriteLine(被除数为零!); catch (Exception e) Console.WriteLine(出错了!); 当有异常发生在受保护的
19、代码块中时,C# 提供了一种机制来保证不管异常的结果如何,有块代码必须得到执行,这就是finally代码块。finally代码块必须跟在try语句之后,就像是异常处理的最后环节,它不需要参数列表。使用finally语句时必须注意以下几点:在finally块中出现的break,continue或goto语句,它们的目标地址必须在finally语句块内,否则将产生编译错误。finally语句块中不允许出现return语句。 也可以同时具有catch和finally代码块,此时,finally代码块必须放在所有catch代码块的后面,如果没有产生异常,则在try块之后执行finally代码块;如果产
20、生了异常,就执行相应的catch块,然后执行finally代码块 在程序控制离开try语句块时,该块中finally语句块中的语句都会被执行。无论是程序正常执行或者是执行了break,continue或goto语句,或者是把异常传递到try块语句之外。 对于嵌套的try语句,如果在finally块语句的执行过程中抛出了一个异常,则异常将被传递到下一个直接包围此try块的上一层try块语句。using System;class program static void Main() try Console.WriteLine(HelloWorld); goto lab; finally Console.WriteLine(finally); lab: Console.WriteLine(Game over);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程经济中的风险与收益均衡研究试题及答案
- 水利水电工程小结和试题及答案分析
- 2025年项目管理的健康管理技巧试题及答案
- 2024-2025项目管理人员安全培训考试试题【巩固】
- 2025年新版车间安全培训考试试题含下载答案可打印
- 行政管理专业经济法在职实践试题及答案
- 2025-2030年键盘行业市场发展现状及发展趋势与投资前景预测研究报告
- 2025-2030年钢筋强化机械行业市场发展分析及发展趋势与投资研究报告
- 2025-2030年舞台表演服行业市场深度调研及前景趋势与投资研究报告
- 2025-2030年精酿啤酒产业市场深度分析及前景趋势与投资研究报告
- 【8生 会考】2022-2024年安徽省初中(八年级)中考初二会考生物试卷(3年真题)
- 2025年网络与信息安全专业考试试卷及答案
- 2024年陕西省普通高中学业水平合格性考试历史试题(解析版)
- 中国干眼临床诊疗专家共识(2024年)解读
- 2mm土工膜长丝土工布检测报告合格证
- 一年级家长会课件2024-2025学年
- 拉美文化学习通超星期末考试答案章节答案2024年
- 校长思政课课件-百年奥运
- 文艺复兴经典名著选读智慧树知到期末考试答案章节答案2024年北京大学
- 小小科学家《物理》模拟试卷A(附答案)
- 体能科学训练方法智慧树知到期末考试答案2024年
评论
0/150
提交评论