您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第4部分 程序调试与错误处理-完成版
主讲人:邵利平博士电子邮件:slpmaster@163.com单位:计算机科学学院slpmaster@163.com@163.com为什么要调试错误及著名的案例为什么要调试错误及著名的案例(1)(1)智者千虑,仍有一失.任何程序编制,都不是一蹴而就的.程序中的错误导致的严重问题,在软件发展史上有不胜枚举著名的例子.slpmaster@163.com为什么要调试错误及著名的案例为什么要调试错误及著名的案例(2)(2)1962年7月28日,MarinerI空间探测器事件。Mariner1航空软件的bug导致火箭在发射时偏离了其的预期轨道。任务控制器在大西洋上空将整个火箭摧毁。在对这起事故进行调查中发现,使用铅笔撰写下的一个公式被不正确的录入到计算机代码中,直接导致计算机错误的计算了火箭的运行轨道。slpmaster@163.com为什么要调试错误及著名的案例为什么要调试错误及著名的案例(3)(3)1985-1987年间Therac-25医疗加速器事件。Therac-25是一个治疗设备,该设备可能会发出两种射线:或者是一个低功耗的电子束或者是X射线。然而Therac-25是建立在有一个没有经过正规培训的程序员所开发的操作系统上的。个快速的打字员很可能会很偶然的配置Therac-25从而导致电子束将会在高能模式下启动,强烈的X射线偏移了目标。昀后直接导致了五名患者死亡而其余患者受到了严重伤害。slpmaster@163.com为什么要调试错误及著名的案例为什么要调试错误及著名的案例(4)(4)1988年--伯克利UNIX操作系统finger守护进程缓冲器溢出事件。第一个网络蠕虫,莫里斯蠕虫利用缓冲器溢出在一天之内感染了2000到6000台计算机,起因是一个标准输入输出库函数gets(),原来设计为从网上获取一段文本,但遗憾的是,gets()函数没有规定输入文本的长度。过长的文本导致蠕虫入侵任何接入的计算机。缓冲器溢出的机理是利用缓冲溢出,不恰当的取得重要数据的地址,从而不恰当的访问内存数据.slpmaster@163.com为什么要调试错误及著名的案例为什么要调试错误及著名的案例(5)(5)1993年--Intel奔腾浮点指数除法事件。一个硅片上的错误导致Intel高性能奔腾芯片在一段范围内计算浮点指数除法时发生错误。例如4195835.0/3145727.0产生的是1.33374而不是1.33382,产生了0.006偏差。尽管该bug仅仅影响了几个用户,然而他却成了整个公众的噩梦。估计流通中的三百万到五百万的芯片存在着这样的缺陷,起初Intel仅仅为那些能够证明他们确实有高精度计算需求的用户提供了取代奔腾的芯片。昀后,Intel公司只好妥协为任何投诉的人提供替代芯片。该bug给Intel昀终造成了4亿7千5百万损失。slpmaster@163.com为什么要调试错误及著名的案例为什么要调试错误及著名的案例(6)(6)1996年6月4号—501航天飞机爆炸事件。对于Ariane4火箭的工作代码在Ariane5中被重新使用,但是Ariane5更高速的运算引擎在火箭航天计算机中的算法程序中触发了一个bug。该错误存在于将64位浮点数转换为16位带符号整数的程序中。更快的运算引擎导致了Ariane5中的64位数据要比Ariane4中更长,直接诱发了溢出条件,昀终导致了航天计算机的崩溃。首先501航天飞机的备份计算机崩溃,然后0.05秒之后,主计算机也崩溃了。这些计算机崩溃直接导致了火箭的主要处理器使火箭的运算引擎过载,同时导致火箭在发射40秒后解体破碎。slpmaster@163.com为什么要调试错误及著名的案例为什么要调试错误及著名的案例(7)(7)因此应学习程序的各种调试技巧,用以拔除程序中潜在的各种错误,提高程序的编写质量,从而避免潜在的危害.slpmaster@163.com@163.com错误类型错误类型(1)(1)程序的错误类型主要有以下3种:1.语法错误:不符合特定语言的语法规则;2.执行错误:出现了程序编制时未出现和未估计的状态;3.逻辑错误:程序编制过程中偏离原有的意图.slpmaster@163.com错误类型错误类型(2)(2)尽管VB2005提供了智能感知功能,能对一些语法错误进行提示和纠正,但功能十分有限,有些错误仍需程序员仔细分析,根据实际情况解决.程序语法错误产生的原因主要有以下2种:1.当前语句不满足特定的语法规则引起的错误;2.其他位置的语法问题导致当前的语句出错.slpmaster@163.com错误类型错误类型(3)(3)VB2005在当前语法出现错误的地方都会标记波浪线,当鼠标指针移动到波浪线上,会提示出错的原因,同时在错误列表框中显示错误的简短说明和标识错误的位置.slpmaster@163.com错误类型错误类型(4)(4)双击程序出错代码,光标将自动移动到出错位置,并自动进行高亮选择.slpmaster@163.com错误类型错误类型(5)(5)根据出错提示:将Messagebox.shew改为Messagebox.show,则错误被拔除.错误已经被拔除slpmaster@163.com错误类型错误类型(6)(6)有时一个位置的错误会引起一系列的错误,这是错误的累计效应,当源头错误被拔除,则所有的问题得以解决.比如,在上面的程序中,我们错将End输入为End1,则引入4个错误slpmaster@163.com错误类型错误类型(7)(7)对于这类错误,需综合分析,找到问题所在,这里需要编程经验和阅历一点一滴的积累.一旦找到问题所在,则所有问题迎刃而解.slpmaster@163.com错误类型错误类型(8)(8)执行错误是指程序在运行过程中,由于出现了没有预计的情况,而导致程序出错.比如以上程序如果不加isdate限制,就会导致不合法日期录入.slpmaster@163.com错误类型错误类型(9)(9)防止产生执行错误的昀好方法是在错误发生前预先估计所有可能出现的错误,并通过错误处理技术捕捉和处理错误.slpmaster@163.com错误类型错误类型(10)(10)逻辑错误是指程序在编制过程中偏离原来的程序意图,导致程序执行结果错误,产生这类错误的原因是算法设计有问题或程序编写错误.slpmaster@163.com错误类型错误类型(11)(11)请考虑以下程序例子能否实现1+2+…+100,为什么?DimintConAsInteger=0DimintSumAsInteger=0DoWhileintcount=100intCon+=1intSum+=intConLoop当IntCon=100,intCon+=1,intSum+=101发现逻辑错误的昀好方法是程序调试.slpmaster@163.com@163.com程序调试(1)程序调试是程序设计中不可缺少的一环,无论经验丰富的编程人员还是初学者,都会犯错误.VB2005提供的调试方法为:1.设置断点;2.跟踪程序运行过程及变量值变化;3.进而发现程序的错误.slpmaster@163.com程序调试(2)在程序中设置断点的方法主要有:1.将光标移动到需要设置断点的语句上,按F9可设置断点(如果将光标移动到已设置断点的语句上,按F9可取消断点);2.单击需要设置断点的语句行对应的编辑器左端的灰色条可设置断点(对于已设置断点的,可用对应的方法取消断点slpmaster@163.com程序调试(3)以下是设置好的断点这里可通过单击,设置和取消断点slpmaster@163.com程序调试(4)当程序执行到断点位置,程序会暂停并切换到代码编辑窗口中的断点位置.控制程序继续运行的方法有:1.按F5或选择启动调试或鼠标单击可使程序继续执行slpmaster@163.com程序调试(5)2.按F8或选择逐语句或鼠标单击可使程序单步执行单步执行的好处是可以细粒度观测一段代码是否达到预期slpmaster@163.com程序调试(6)3.按Shift+F8或选择逐过程或鼠标单击可使程序在执行线索上执行而不必追究执行线索上某个过程的具体细节.逐过程的好处是只关注某个执行线索是否能达到预期slpmaster@163.com程序调试(6)4.按Ctrl+Shift+F8或选择跳出或鼠标单击可使程序跳出当前端点继续执行跳出当前函数,如果该函数是嵌套函数,则向上移动一级。如果位于主体中,则脚本执行到末尾或下一个断点。slpmaster@163.com程序调试(7)之所以设置断点,目的是快速定位到程序有问题的地方从而排错.当然也可不设置断点,通过菜单,工具栏或快捷命令直接进入逐语句和逐过程调试模式.这里是程序当前位置执行slpmaster@163.com程序调试(8)当鼠标移动到指示箭头上,按祝鼠标左键可将箭头拖动到其他语句上,从而控制程序从新位置开始.slpmaster@163.com程序调试(9)在程序调试时,通过在程序中设置断点,或启动逐语句或逐过程,都可将程序运行到指定位置,然后查看程序的运行状态.查看变量和表达式的状态主要有以下几种:1.在编辑器中通过鼠
本文标题:第4部分 程序调试与错误处理-完成版
链接地址:https://www.777doc.com/doc-4166378 .html