在编写程序的过程中,难免会遇到一些错误为了消除这些_第1页
在编写程序的过程中,难免会遇到一些错误为了消除这些_第2页
在编写程序的过程中,难免会遇到一些错误为了消除这些_第3页
在编写程序的过程中,难免会遇到一些错误为了消除这些_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、第13章 程序调试与错误处理1311程序调试与错误处理( 视频讲解:25分钟)第第 章章导读在编写程序的过程中,难免会遇到一些错误。为了消除这些错误,开发人员需要对应用程序进行调试,查出错误的原因。这些错误可能是非常隐蔽且难以发现的,因此,开发人员需要进行大量故障排查才能发现错误的根源。应用程序开发完成且错误消除之后,必须使用各种数据对它们进行测试,才能确保应用程序能够成功运行。本章主要介绍如何对程序进行调试以及错误处理。13.1 程 序 调 试程序调试是在程序中查找错误的过程,在开发过程中,程序调试是检查代码并验证它能否正常运行的有效方法。另外,在开发时,如果发现程序不能正常工作,就必须找出

2、并解决有关问题。本节将对几种常用的程序调试操作进行讲解。13.1.1 断点断点通知调试器,应用程序在某点上(暂停执行)或某情况发生时中断。发生中断时,称程序和调试器处于中断模式。进入中断模式并不会终止或结束程序的执行,所有元素(如函数、变量和对象)都保留在内存中。执行可以在任何时候继续。插入断点有3种方式:在要设置断点行旁边的灰色空白处单击;右击设置断点的代码行,在弹出的快捷菜单中选择“断点”/“插入断点”命令,如图13.1所示;单击要设置断点的代码行,选择菜单中的“调试”/“切换断点”命令,如图13.2所示。 图13.1 右击插入断点   图13.2 菜单栏插入断点插入断点后,就会

3、在设置断点的行旁边的灰色空白处出现一个红色圆点,并且该行代码也呈高亮显示,如图13.3所示。图13.3 插入断点后效果图图13.4 选择“删除断点”命令删除断点主要有如下3种方式。þ 可以单击设置了断点的代码行左侧的红色圆点。þ 在设置了断点的代码行左侧的红色圆点上右击,在弹出的快捷菜单中选择“删除断点”命令。þ 在设置了断点的代码行上右击,在弹出的快捷菜单中选择“断点”/“删除断点”命令,如图13.4所示。13.1.2 开始执行开始执行是最基本的调试功能之一,从“调试”菜单(见图13.5)中选择“启动调试”命令或在源窗口中右击,可执行代码中的某行,然后从弹出的快

4、捷菜单中选择“运行到光标处”命令,如图13.6所示。 图13.5 “调试”菜单 图13.6 某行代码的右键菜单除了使用上述的方法开始执行外,还可以直接单击工具栏中的按钮,启动调试,如图13.7所示。图13.7 工具栏中的启动调试按钮如果选择“启动调试”命令,则应用程序启动并一直运行到断点。可以在任何时刻中断执行,以检查值、修改变量或检查程序状态,如图13.8所示。图13.8 选择“启动调试”命令运行结果如果选择“运行到光标处”命令,则应用程序启动并一直运行到断点或光标位置,具体要看是断点在前还是光标在前,可以在源窗口中设置光标位置。如果光标在断点的前面,则代码首先运行到光标处,如图13.9所示

5、。图13.9 选择“运行到光标处”命令运行结果13.1.3 中断执行当执行到达一个断点或发生异常,调试器将中断程序的执行。选择“调试”/“全部中断”命令后,调试器将停止所有在调试器下运行的程序的执行。程序并不退出,可以随时恢复执行。此时调试器和应用程序处于中断模式。“调试”菜单如图13.10所示。除了通过选择“调试”/“全部中断”命令中断执行外,也可以单击工具栏中的按钮中断执行,如图13.11所示。   图13.10 “调试”菜单   图13.11 工具栏中的中断执行按钮13.1.4 停止执行停止执行意味着终止正在调试的进程并结束调试会话,可以通过选择菜单中的“调

6、试”/“停止调试”命令来结束运行和调试。也可以单击工具栏中的按钮停止执行。13.1.5 单步执行通过单步执行,调试器每次只执行一行代码,单步执行主要是通过“逐语句”、“逐过程”和“跳出”这3种命令实现的。“逐语句”和“逐过程”的主要区别是当某一行包含函数调用时,“逐语句”仅执行调用本身,然后在函数内的第一个代码行处停止。而“逐过程”执行整个函数,然后在函数外的第一行处停止。如果位于函数调用的内部并想返回到调用函数时,应使用“跳出”命令,“跳出”命令将一直执行代码,直到函数返回,然后在调用函数中的返回点处中断。当启动调试后,可以单击工具栏中的按钮执行“逐语句”操作、单击按钮执行“逐过程”操作和单

7、击按钮执行“跳出”操作,如图13.12所示。图13.12 单步执行的3种命令除了在工具栏中单击这3个按钮外,还可以通过快捷键执行这3种操作,启动调试后,按下F11键执行“逐语句”操作、F10键执行“逐过程”操作以及Shift+F10键执行“跳出”操作。13.1.6 运行到指定位置如果希望程序运行到指定的位置,可以在指定代码行上右击,在弹出的快捷菜单中选择“运行到光标处”命令,这样当程序运行到光标处时就会自动暂停;另外,也可以在指定的位置插入断点,同样可以使程序运行到插入断点的代码行时自动暂停。13.2 常见服务器故障排除在Visual Studio中测试网站时,ASP.NET Developm

8、ent Server将自动运行,但在一些情况下,使用ASP.NET Development Server会产生错误。本节介绍Web服务器可能产生的错误,并提供相应的解决办法。13.2.1 Web服务器配置不正确运行网站时,显示如下错误:The web server is not configured correctly. See help for common configuration errors. Running the web page outside of the debugger may provide further information. 造成该错误的原因以及常见的解决办法大

9、概包括以下两种。þ 原因1:网站的执行权限不够解决办法:打开IIS,选择对应网站的属性,在“主目录”选项卡中选择执行权限为“脚本和可执行文件”。þ 原因2:身份验证方式不正确解决办法:打开IIS,在“网站”节点下选择对应网站,单击鼠标右键,在弹出的快捷菜单中选择“属性”命令,打开网站的属性窗口,选择“目录和安全性”选择卡,单击“匿名访问和身份验证控制”区域中的“编辑”按钮,打开身份验证方法,选中“启用匿名访问”和“集成Windows身份验证”复选框。13.2.2 IIS管理服务没有响应当IIS管理服务没有响应时,会发生“安全检查失败,因为IIS管理服务没有响应”的错误,这通

10、常表示IIS的安装有问题。解决此错误的方法如下:(1)使用“管理工具”中的“服务”工具验证该服务是否正在运行。(2)然后按照以下方法进行操作。þ 使用“程序和功能”中的“打开或关闭Windows功能”重新安装IIS。 þ 使用“程序和功能”中的“打开或关闭Windows功能”从计算机中删除IIS并重新安装IIS。执行以上两个步骤中的任一步骤后,需要重新启动计算机。13.2.3 未安装ASP.NET当用户尝试调试的计算机上未正确安装ASP.NET时,会发生“未安装ASP.NET”错误,此错误可能意味着从未安装过ASP.NET,或者先安装了ASP.NET,然后又安装了IIS。解

11、决此错误的方法如下:选择“开始”菜单中的“运行”命令,在打开的“运行”窗口输入以下命令安装ASP.NET并注册到IIS。WINNTMicrosoft.NETFrameworkversionaspnet_regiis -i其中,version表示安装在用户计算机上的.NET Framework的版本号。13.2.4 连接被拒绝连接被拒绝时,服务器报告以下错误:10061-Connection RefusedInternet Security and Acceleration Server如果计算机在受Internet Security and Acceleration Server(SA Ser

12、ver)保护的网络上运行,并且满足以下条件之一,就会发生此错误:þ 客户端未安装防火墙。þ Internet Explorer中的Web代理配置不正确。避免此问题的方法如下:þ 安装防火墙客户端软件,如ISA客户端。þ 修改Internet Explorer中的Web代理连接设置,以跳过用于本地地址的代理服务器。13.2.5 不能使用静态文件在网站中,静态文件(如图像和样式表)受到ASP.NET授权规则的影响。例如,如果禁用了对静态文件的匿名访问,匿名用户则不能使用网站中的静态文件,但是,将网站部署到运行IIS的服务器时,IIS将提供静态文件而不使用授权

13、规则。13.3 异常处理语句在ASP.NET程序中,可以使用异常处理语句处理异常。常用的异常处理语句有throw、trycatch和trycatchfinally语句,通过这3种异常处理语句,可以对可能产生异常的程序代码进行监控。下面将对这3种异常处理语句进行详细讲解。13.3.1 使用throw语句抛出异常throw语句用于主动引发一个异常,即在特定的情形下自动抛出异常。throw语句的基本格式如下:throw ExObject参数ExObject表示所要抛出的异常对象,这个异常对象是派生自System.Exception类的对象。【例13.1】 使用throw语句抛出异常。(示例位置:TM

14、sl1301)程序实现的主要步骤如下。新建一个网站,默认主页为Default.aspx。在Default.aspx的Page_Load事件中,创建一个int类型的方法MyInt,该方法有两个int类型的参数a和b,其中a为分子,b为分母。如果分母的值是0,则通过throw语句抛出DivideByZeroException异常。代码如下: public int MyInt(int a, int b)/创建一个int类型的方法,参数分别是a和b int num;/声明一个int类型的变量num if (b = 0)/判断b是否等于0,如果等于0,抛出异常 throw new DivideByZer

15、oException();/抛出DivideByZeroException类的异常 return 0; else num = a / b;/计算a除以b的值 return num;/返回计算结果 protected void Page_Load(object sender, EventArgs e) /调用test类中的MyInt方法计算两个数的商 Response.Write("分子除以分母的值:" + MyInt(298, 0);运行以上程序,因为要计算的数值的分母为0,所以程序出错,错误信息如图13.13所示。图13.13 分母为0的错误信息13.3.2 使用tryc

16、atch语句捕捉异常trycatch语句允许在try后面的大括号中放置可能发生异常情况的程序代码,并对这些程序代码进行监控,而catch后面的大括号中则放置处理错误的程序代码,以处理程序发生的异常。trycatch语句的基本格式如下:try/被监控的代码catch(异常类名 异常变量名)/异常处理在catch语句中,异常类名必须为System.Exception或从System.Exception派生的类型。当catch语句指定了异常类名和异常变量名后,就相当于声明了一个具有给定名称和类型的异常变量,此异常变量表示当前正在处理的异常。【例13.2】 使用trycatch语句捕捉异常。(示例位置

17、:TMsl1302)程序实现的主要步骤如下。新建一个网站,默认主页为Default.aspx。在Default.aspx的Page_Load事件中声明一个object类型的变量obj,其初始值为null,然后将obj强制转换成int类型赋给int类型变量N,使用trycatch语句捕获异常。代码如下: protected void Page_Load(object sender, EventArgs e) try/使用trycatch语句 object obj = null;/声明一个object变量,初始值为null int N = (int)obj;/将object类型强制转换成int类型

18、 catch (Exception ex)/捕获异常 Response.Write("捕获异常:" + ex);/输出异常 实例运行效果如图13.14所示。图13.14 使用trycatch语句捕捉异常(1)上面的实例是直接使用System.Exception类捕获异常,使用其他异常类捕获异常的方法与其类似,这里不再赘述。(2)在trycatch语句中可以包含多个catch语句,但程序只执行第一个catch语句中的信息,其他的catch语句将被忽略。常变量表示当前正在处理的异常。13.3.3 使用trycatchfinally语句捕捉异常将finally语句与trycatc

19、h语句结合,可以形成trycatchfinally语句。finally语句同样以区块的方式存在,它被放在所有trycatch语句的最后面,程序执行完毕,最后都会跳到finally语句区块,执行其中的代码。其基本格式如下:try/被监控的代码catch(异常类名 异常变量名)/异常处理finally/程序代码如果程序中有一些在任何情况下都必须执行的代码,则可以将其放在finally语句区块中。【例13.3】 使用trycatchfinally语句捕捉异常。(示例位置:TMsl1303)程序实现的主要步骤如下:新建一个网站,默认主页为Default.aspx。在Default.aspx的Page_Load事件中,声明一个string类型变量str,并初始化为“ASP.NET编程词

温馨提示

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

评论

0/150

提交评论