《调试、测试和异常处理》由会员分享,可在线阅读,更多相关《调试、测试和异常处理(32页珍藏版)》请在金锄头文库上搜索。
1、第五章,调试、测试和异常处理,2,目标,理解如何调试应用程序和排除错误掌握如何测试 C# 应用程序了解测试和调试的区别在程序中进行错误捕获和错误处理,3,简介,应用程序开发,可以安装在客户端机器上,应用程序必须,无错误无故障 可靠 稳健,查找和排除错误或故障称为调试,4,调试的必要性,计算机化的计费系统,在事物处理过程中,系统显示错误消息,必须重新输入全部信息,在部署应用程序前必须先对其进行调试,5,错误类型,错误类型,语法错误,逻辑错误,运行时错误,语法错误、缺少括号等在编译时确定易于确定,错误的算法导致错误结果、公式错误等 在执行过程中确定难以调试,内存泄漏、以零作除数、异常在运行时确定难
2、以调试,6,调试过程 5-1,调试器,观察程序的运行时行为,跟踪变量的值,确定语义错误的位置,查看寄存器的内容,查看内存空间,7,调试过程 5-2,暂停,可在代码中插入“断点”,以便在特定行处暂停执行该代码,8,调试过程 5-3,右键单击所需代码行,以设置断点,选择“插入断点”,9,调试过程 5-4,选择“调试” “继续”以便继续执行程序,10,调试过程 5-5,.NET 集成开发环境,Debug模式,Release模式,11,VS.NET 中的调试工具 5-1,“局部变量”窗口,12,VS.NET 中的调试工具 5-2,“监视”窗口,13,VS.NET 的调试工具 5-3,“快速监视”对话框
3、,14,VS.NET 中的调试工具 5-4,“即时”窗口,15,VS.NET 中的调试工具 5-5,跨语言调试 调试使用 .NET 框架编写的应用程序以及 Win32 本机应用程序加入正在运行的程序调试多个程序,Visual Studio .NET 调试器的功能,16,异常,网上银行,某学生小王转帐5000到其朋友小李的帐面上,0,4500,数据库,系统将查询发送到数据库中,tranfer_money() sendquery(); . .,余额 4500-5000,程序崩溃,拒绝交易,“C#”中的异常,17,C# 中的异常处理2-1,.INPUT DivisorIF Divisor = 0 T
4、HENResult = Divident/Divisor.,代码片段 1,输入除数,结果 =,_,0,2,4,GOTO PREVIOUS LINE,触发异常处理程序,18,C# 中的异常处理2-2,.INPUT DivisorResult = Divident/Divisor.,代码片段 1,“用户自定义”错误检查机制,难以检查输入的任何“特殊字符”,IF Divisor = 0 THEN GOTO PREVIOUS LINEIF Divisor 0 THEN PRINT “无效输入”,运行库,运行库应当提供“错误检查机制”,19,System.Exception 3-1,20,System.
5、Exception 3-2,21,System.Exception 3-3,在 C# 程序中,引发异常共有以下两种方式,使用显式 throw 语句来引发异常。在此情况下,控制权将无条件转到处理异常的部分代码使用语句或表达式在执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常,Try.Catch.Finally,22,try 和 catch 块 4-1,滤水器,filter_water() try water(); catch impurities.Show(); . .,过滤水,杂质,/程序代码,/错误处理代码,try/程序代码catch (IOException E)/错误处
6、理代码,23,try 和 catch 块 4-2,try/程序代码catch (IOException E)/错误处理代码,引发I/O 设备异常,24,try 和 catch 块 4-3,try/程序代码catch( E)/错误处理代码,可处理系统中的任何一种异常,System.Exception,25,try 和 catch 块 4-4,if (grade 150)throw new InvalidNumberInput(grade+ “不是合法的成绩”);,throw 可用来引发自定义异常“InvalidNumberInput”,26,使用 finally,try/程序代码catch/错误
7、处理代码finally/finally 代码,无论有否异常该代码都会执行,27,多重 catch 块 2-1,try/程序代码catch (IOException E)/错误处理代码catch (OutOfMemoryException E)/错误处理代码,用于捕捉两种异常的“catch”块,28,多重 catch 块 2-2,public class MyException : System.ApplicationExceptionpublic MyException(string message):base(message)try int c= a /b;catch(MyExeption
8、ex) Console.WriteLine(ex.Message);,.if(b = 0) throw new MyException(“除数不能为零);,29,示例-建立自定义异常,using System;public class EmailCheckException:ApplicationExceptionpublic string _mes;/重写构造函数public EmailCheckException():base() _mes = null;public EmailCheckException(string message):base() _mes = message.ToS
9、tring();public EmailCheckException(string message, Exception myNew):base(message,myNew)_mes = message.ToString();/Message属性的重载public override string Message get return 格式错误;,30,示例-throw自定义异常,private bool InfoSave (string name, string email)string subStrings = email.Split();/如果输入的Email不是被“”字符分割成两段,则抛
10、出Email错误异常if(subStrings.Length != 2) throw new EmailCheckException();elseint index = subStrings1.IndexOf(.);/查找被“”字符分成的两段的后一段中“.”字符的位置,没有“.” /或者“.”字符是第一个字符,则抛出EmailErrorException异常if(index = 0)throw new EmailCheckException();/如果“.”字符是最后一个字符,抛出EmailErrorException异常if(subStrings1subStrings1.Length -1
11、= .)throw new EmailCheckException();return true;,31,示例-Catch自定义异常,private void Submit_Click(object sender, System.EventArgs e)if(textName.Text.Length = 0 ,32,总结,调试是搜寻和消除应用程序中的错误的过程语法错误表示编译器无法理解代码调试模式可用来重复编译和排除应用程序中的错误,直至能够成功运行“局部变量”窗口允许用户监控当前程序中所有变量的值单元测试和集成测试是测试大型应用程序的常用技术当应用程序遇到运行时错误时,就会引发异常C# 中的所有异常都派生自 Exception 类,