版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 调试技术与异常处理学习目标:掌握非中断和中断模式下程序的调试技术学会对程序运行中的错误进行处理10.1 程序的调试技术 程序中出现错误是在所难免的,虽然VS 2005的代码编辑器能够将程序中出现的语法错误和可能出现的编译错误自动检测出来,但很多情况下,错误只在程序运行期间才发生。例如一个简单的按钮引用错误,代码编辑器并不能自动检测出来,而这却很有可能引发程序的崩溃。使用VS 2005的调试技术,可以跟踪应用程序的执行状况,对可能引发程序错误的代码进行修改;另外,为了对可能发生错误的地方采取预防措施,程序员还可以编写有足够弹性的代码来处理可能出现的程序异常。 调试应用程序的目的是为了查
2、看它们是否按照程序员希望的那样来运行,如果不是,则修改它们。VS 2005的调试可以在两种模式下进行:中断模式和非中断(正常)模式。10.1.1 非中断模式下的调试技术输出调试信息:在程序运行期间可以通过在【输出】窗口输出信息来跟踪程序的执行状况,以查看程序是否正常运转,可以使用如下两个命令:Debug.WriteLine()Trace.WriteLine() 这两个命令的使用方法和Console.WriteLine()相似,唯一区别在于这两个命令的字符串参数用户输出消息,不需要使用X语法插入变量值。另外,Debug.WriteLine()仅在调试模式下运行,而Trace.WriteLine(
3、)还可用于应用程序的发布。实际上,Debug.WriteLine()甚至不能编译为可发布的程序,在发布版本中,该命令会消失(应用程序一般包括两个版本:调试版本和发布版本)。设置跟踪点: 使用Debug.WriteLine()命令需要修改程序代码,VS 2005提供了另外一种将信息输出到【输出】窗口的方法:设置跟踪点,这种方法不需要修改代码。将鼠标光标放置到要插入跟踪点的代码行上右击(跟踪点会在执行该行代码前进行处理),在弹出菜单中选择【断点】|【插入跟踪点】命令,在打开的【命中断点时】对话框中,选中【打印消息】复选框,并在下面的文本框中输入要输出的字符串,单击【确定】按钮,包含该跟踪点的代码行
4、左侧将出现一个红色的菱形,该行代码也将显示为红色。 如果要禁用或临时禁用某个跟踪点,可右击该跟踪点,从弹出菜单中选择相应的命令。禁用的跟踪点在代码编辑器中显示为菱形框,而不是实心菱形。可通过【断点】窗口快速查看应用程序中所有的跟踪点。10.1.2 中断模式下的调试技术中断模式下的调试是指先暂停应用程序的执行,再进行调试,或者注上标记,以便以后进行分析。断点的作用和添加方式进入中断模式跟踪变量值单步执行代码调用堆栈断点是应用程序在调试时自动进入中断模式的标记,通过它们,可以:在遇到断点时,立即进入中断模式;在遇到断点时,如果布尔表达式的值为True,则进入中断模式;遇到某断点的次数达到一定程度后
5、,进入中断模式;在遇到某断点时,如果自从上次遇到该断点以来变量的值发生了变化,就进入中断模式;将字符串信息输出到调试窗口中,或者执行一个宏。添加断点 删除断点 设置断点条件 设置断点命中次数当应用程序的断点被触发时,便自动进入中断模式,中断的代码行将呈黄色高亮显示。除此之外,进入中断模式最简单的方式是在调试应用程序时,单击调试工具栏的【暂停】按钮。在VS 2005环境下调试应用程序时,可以利用其提供的工具来跟踪和监视变量的值:运行应用程序,程序将在该断点位置进入中断模式,用鼠标指向该行代码中的变量名,系统将自动就会出现一个黄色的工具提示,显示该变量的信息,包括变量的当前值。还可以高亮显示整个表
6、达式,以相同的方式查看表达式的值,对于比较复杂的数据结构,如数组、枚举等,还可以扩展工具栏中的提示,查看其中元素的值。调试界面底部左侧的3个窗口在调试时非常有用,可以在中断模式下,在跟踪并监控应用程序的变量值。每个窗口都包含了一个变量列表,提供了变量的名称、值和类型等信息。【局部变量】窗口显示了作用域内的所有变量,可在该窗口编辑变量的值,该值可以有效绕过前面代码中的对变量的赋值,只需在【值】列对应的位置输入一个新值即可。【监视】窗口可用于监视特定变量或涉及变量的表达式,只需在【变量】列输入变量名或表达式,就可以查看它们的结果,还可以在【监视】窗口中访问变量的各种结果,显示变量在断点之间的变化情
7、况。进入中断模式后,利用调试工具栏的按钮可以实现语句的单步执行,即一次执行一条语句。如果要查看应用程序在运行时的每个执行步骤,可以单击【逐语句】按钮,应用程序将逐行执行;如果要跳过代码块(如方法、循环等),可以单击【逐过程】按钮,应用程序将跳出方法或循环,直接执行后面的语句;如果对执行的方法代码体不感兴趣,可以单击【跳出】按钮,返回调用该方法的语句。在含有语义错误的代码中,使用单步调试是十分有效的,当执行到有错误的代码时,错误就会像正常运行程序的那样发生。在这个过程中,可以监视数据,看看在什么地方出错。【调用堆栈】位于VS 2005程序运行环境的右下侧,该窗口描述了应用程序是如何执行到当前位置
8、的,也就是说,显示了程序的调用记录。如果双击其中一项,就会移动到相应的位置,跟踪代码执行到当前位置的过程。在第一次检测错误时,该窗口非常有用,可以用来查看错误发生的情况,对于常用函数中出现的错误,该窗口有助于找到错误的源头。10.2 处理异常 异常是程序中产生的错误,或者在运行期间由代码调用产生的错误。这里的“错误”定义比较含糊,因为我们不能肯定错误会不会发生,例如方法的参数和传递过来的参数类型不一致等都可能引发异常。此时,最好的方法就是预料可能出现的错误,编写足够强壮的代码以处理这些错误,而不必中断程序的运行。 .NET Framework提供了许多处理异常的类,它们在命名空间中定义,大多数
9、异常的名称都说明了它们的用途,例如“IOException”定义I/O错误时引发的异常,“IndexOutOfRangeException”定义数组下标越界引发的异常等。10.2.1 trycatchfinallyC#语言提供了结构化异常处理(SHE,Structured Exception Handling)的语法,关键字可以标记出处理异常的代码和命令,如果发生异常,就使用这些代码来处理异常。用于处理异常的3个关键字是try、catch、finally,它们都有一个关联的代码块,必须在连续的代码行中使用。private void OpenFileDialog() try richTextBo
10、x.Clear(); this.Text = this.filename; richTextBox.Text = File.ReadAllText(this.filename); catch(IOException ex) MessageBox.Show(ex.Message, 编辑器, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 上诉代码中没有使用finally块,也可以只有try块和finally块,而没有catch块,或者一个try块和多个catch块。它们的用法如下。try块:提供产生或导致异常的代码;catch块:提供发生异常
11、时要执行的代码。catch块可以包含参数,以响应特定的异常类型,因而可以提供多个catch块,也可以不包含任何参数,以响应所有的异常;finnaly块:提供总是会执行的代码。如果没有产生异常,就在try块之后执行,如果处理了异常,就在catch块之后执行,或者在未处理的异常中断应用程序之前执行。在try块中的代码发生异常后,事件的发生顺序如下: try块在发生异常的地方中断程序的运行。如果有catch块,就检查该块是否匹配所发生的异常类型,如果匹配,就执行它所包含的代码,如果提供有finally块,就继续执行finally块中的代码;如果该catch块与发生的异常不匹配,就检查是否有其他的ca
12、tch块与发生的异常匹配,如果有就执行,然后继续执行finally块(前提是提供了该块),如果没有就直接执行finally块中的代码(如果没有catch块,程序中就必须有finally块)。10.2.2 列出和配置异常.NET Framework包含许多异常类型,可以通过对它们进行配置,使得在代码中自由产生和处理此类异常,甚至在复杂的应用程序中捕获。选择【调试】|【异常】命令,打开【异常】对话框,可通过该对话框查看和编辑可用的异常。【异常】对话框中的异常按照类别和.NET库命名空间列出,展开“Common Language Runtime Exceptions”|“System”节点,便可以查
13、看System命名空间中的所有异常。每个异常度可以使用右边的复选框来加以配置。选中某个异常对应【引发】列的复选框,当应用程序发生此类异常时,便会中断调试器;选中【用户未处理的】列的复选框,当应用程序发生此类异常时,如果用户没有编写处理程序,应用程序便会忽略该异常。不过,在大多情况下,使用VS 2005默认的配置就已经足够了。10.2.3 处理异常时的注意事项引发和处理异常时,应用程序将耗费大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况,而不是为了处理可预知的事件或流控制。例如如果方法参数无效,而应用程序需要使用有效的参数来调用方法,无效的方法参数意味着出现了异常情况,此时便需要引发和处理异常。相反,用户偶尔会输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国棉塑身防寒内衣数据监测研究报告
- 二零二五年度二手车买卖合同书(含二手车检测报告)2篇
- 2025版食堂劳务派遣人员健康体检合同范本3篇
- 二零二五年度高速公路服务区停车场地租赁合同12篇
- 二零二五年度租赁房屋租赁合同物业管理责任范本
- 让善良走进心灵八年级作文范文5篇
- 二零二五年度个人教育贷款还款协议书2篇
- 二零二五年度商业街区小工程施工合同协议2篇
- 房子借租合同
- 摊位租赁协议范本
- 迅雷网盘最最最全影视资源-持续更新7.26
- 设备运维管理安全规范标准
- 办文办会办事实务课件
- 大学宿舍人际关系
- 2023光明小升初(语文)试卷
- GB/T 14600-2009电子工业用气体氧化亚氮
- GB/T 13234-2018用能单位节能量计算方法
- 申请使用物业专项维修资金征求业主意见表
- 高考物理二轮专题课件:“配速法”解决摆线问题
- 房屋买卖合同简单范本 房屋买卖合同简易范本
- 无抽搐电休克治疗规范
评论
0/150
提交评论