欢迎来到天天文库
浏览记录
ID:39394741
大小:299.00 KB
页数:22页
时间:2019-07-02
《异常处理和日志追踪》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章异常处理和日志追踪在应用程序运行过程中,难免会遇到异常、错误。笔者在开发过程中经常会被一些用户投拆软件出现故障,或者是一些乱七八糟的错误提示。用户并不都是专家,看到这些莫名其妙的错误往往会认为是应用程序不稳定因素所致,笔者的同事此时会振振有次的告知用户:软件出现故障是难免的,微软够强大吧,Windows系统还不是会蓝屏出错。这样的解释并不是没有道理,任何软件都不可能十全十美,问题在于开发人员如何处理错误,如何让应用程序能够无缝的从错误中恢复。本章将讨论如何处理ASP.NET应用程序中的异常、如何追踪错误以及解决一些故障问题。将会讨论结构化异常处理,日志记录以及当出现错误时,如
2、何将用户页面重定向到一个用户友好的提示页面,本章也将介绍如何使用页面追踪和查看ASP.NET页面的诊断信息。7.1ASP.NET应用程序异常处理错误的产生很多时候是开发人员始料未及的,有的错误可能运行了很久才突然被触发。然而也有一些错误是由于开发人员的疏漏所造成的,一个简单的例子是被0除。假如在一个具有很多复杂公式的页面上,要求用户输入有效的数据执行计算,由于没有很好的验证机制,用户如果一不小心输入了一个0作为被除数,ASP.NET将跳转到一个错误页面,如图所示。7.1.1异常处理基础大多数.NET语言都支持结构化异常处理,当一个错误引发时,.NET框架其实创建了一个异常对象用于呈
3、现问题。开发人员可以使用异常处理器来捕捉这个异常对象。假如不使用异常处理器的话,用户代码将会被中止,ASP.NET将显示一个让用户迷惑的错误处理页面。为了演示如何使用结构化的异常处理,本小节创建一个异常处理程序命名为CommError。在Default.aspx页面上添加一个Button控件,为该Button添加一个单击事件,代码如下所示。protectedvoidButton1_Click(objectsender,EventArgse){intx=5;inty=0;//故意被0除,产生一个异常intz=x/y;}7.1.2Exception类上一节的示例中,当产生了被零除的错误
4、后,.NET会创建一个名为DivideByZeroException的异常对象,catch块中将捕获这个异常对象,并执行处理异常的代码块。DivideByZeroException是一个派生自Exception的对象。Exception对象中包含了很多有用的关于异常的信息,如上面示例中的Message属性用于获取异常的描这性信息,表中列出了Exception类中的一些成员描述。Exception的成员描述属性类型描述MessageString描述错误的可读文本。当异常发生时,运行库产生文本消息,通知用户错误的性质,并提供解决该问题的操作建议DataIDictionary使用由Dat
5、a属性返回的System.Collections.IDictionary对象来存储和检索与异常相关的补充信息SourceString产生异常的程序集的名称StackTraceString发生异常时调用堆栈的状态。StackTrace属性包含可以用来确定代码中错误发生位置的堆栈跟踪,对于调试来说,这是非常有用的信息TargetSiteMethodBase抛出异常的方法HelpLinkString获取或设置异常的关联帮助文件的链接InnerExceptoinException创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可利用前一个异常的其他信息更适当地处理错误。如果不存在前一
6、个异常,则为null7.1.3捕捉异常通常使用try/catch语句块来捕捉异常,如7.1.1节中的例子所示。当使用catch语句捕捉到一个异常时,都是一个具体类型的异常而不是一个Exception这样的异常基类,具体异常用于描述一个指定类型的错误,例如上一节中的DivideByZeroException异常。在捕捉异常时,可以定义多个catch块,但是只能有一个try块,这一节继续7.1.1节中的示例,将Button1中的单击事件更改为如下的代码:7.1.4异常的嵌套假定在try块中调用一个来自外部的方法,比如定义了一个用于除法运算的函数,在该函数内部捕捉了DivideByZer
7、oException的异常。然后在另外一个try块中调用这个除法运算的函数,这种方法称为嵌套异常。下面继续7.1.1节的示例,复制了Button控件和Label控件,在后置代码中创建二个除法运算的函数,然后在Button按钮的单击事件中调用这个函数,7.1.5自定义异常如果系统提供的异常类已经不能够满足应用系统开发的需要,或者开发团队需要一套自定义异常处理机制,可以创建自定义的异常类。为创建自定义异常类,应该直接或间接地继承自ApplicationException类
此文档下载收益归作者所有