《12调试》-精选课件(公开).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
调 试 定位错误和修改错误的技术 调试 执行一次成功的测试,即发现错误之后要进行调试工作 调试的步骤 第一步:定位错误,确定程序中错误的准确性质和位置,占调试的绝大部分工作量(大概95%) 第二步:修改错误 调试的障碍 个人自尊心:调试说明程序员会在设计或编码时犯错误 热情耗尽:调试耗费脑力,承受较大压力 可能会迷失方向:错误实际上可能出现在程序的任何部位 必须自力更生:关于调试过程的研究、资料和正式的指南都比较少 1 暴力法调试 暴力调试法的特点 使用比较普遍,不需要过多思考 效率低下,成功率低 何时适宜使用? 其他方法都失败 作为思考过程的补充,但不能替代思考过程 暴力调试法的三种类型 利用内存信息输出来调试 根据一般的“在程序中插入打印语句”建议来调试 使用自动化的调试工具进行调试 暴力调试法 使用内存信息输出调试 是最缺乏效率的暴力调试法 难以在内存区域与源程序中的变量之间建立对应关系 内存信息输出会产生非常庞大的数据,大多是无关的 内存信息输出产生的是程序的静态快照,而发现错误还需要研究程序的动态状态(在a状态向b状态转换时如果发现错误就意味着错误已经定位了) 通过分析输出的内存信息来发现问题的方法并不太多 暴力调试法 插入输出变量值的打印语句 可以显示程序的动态状态,让检查的信息可以相对容易地与源程序联系起来 缺点 主要是碰运气,而不是鼓励我们去思考程序中的问题 所产生的需要分析的数据量非常庞大 要求我们修改源代码,这些修改可能会掩盖症状或引入新的错误 可能对小型程序有效,但如果应用到大型程序,成本就相当高,对某些类型的程序,甚至无法使用这种方法 暴力调试法 自动化调试工具 使用编程语言的调试功能,或使用特殊的交互式调试工具来分析程序的动态状态 使用的语言功能:产生可打印的语句执行轨迹的机制,子程序调用以及/或者对特定变量的修改 调试工具的设置断点功能:程序执行到某条特定语句或改动了某个特定变量的值时暂停执行,然后程序员就可以检查程序的当前状态 缺点 仍然是碰运气为主 常会生成数量过于庞大的无关数据 2 归纳法调试 从线索(错误的症状)出发,寻找线索之间的联系 使用归纳法的调试过程 归纳调试的步骤 确定相关数据 列举出所有知道的程序执行的正确和不正确之处,这些不正确之处即是症状 组织数据 组织相关数据,以便观察线索间的模式,找到矛盾、事件。 用“是什么”、“在何处”、“何时”、“多大程度”对症状进行描述 作出假设 研究线索之间的联系,利用线索结构里可能的模式作出一个或多个关于错误原因的假设,选择最有可能的假设 证明假设 将假设与其最初的线索或数据想比较,证明假设的合理性,确定这些假设完全可以解释这些线索的存在 例子 page88 3 演绎法调试 从普遍的理论和前提出发,使用排除和精炼的过程,达到一个结论 使用演绎法的调试过程 演绎调试的步骤 列出所有可能的原因或假设 建立一份所有想像得到的错误原因的清单 利用数据排除可能的原因 详细检查所有数据,尤其是寻找存在矛盾的地方,然后尽量排除所有可能的原因,仅留一条 如果所有的原因都被排除,在增加额外的测试用例,得到更多的数据来设计新的推测 提炼剩下的假设 用现有的线索来提炼这个推测,以具体到能够指出错误 证明剩下的假设 4 回溯法调试 回溯法 沿着程序的逻辑结构回溯不正确的结果,直到找到程序逻辑出错的位置。 从程序产生不正确结果的地方开始,从该处观察到的结果推断出程序变量应该是什么值,并从这个位置开始逆向执行程序,重复使用“如果程序在此处的状态是这样的,那么程序在上面位置的状态就必然是那样的”过程,就能很快定位出错误。 回溯法的适用情况 小型程序 5 测试法调试 测试法 使用测试用例进行调试,当发现了某个被怀疑的错误的症状之后,我们需要编写与原先有所变化的测试用例,尽量确定错误的位置。 两种类型的测试用例 供测试的测试用例:目的是暴露出以前尚未发现的错误,每个测试用例尽量涵盖较多的条件 共调试的测试用例:目的是提供有用的信息,供定位某个被怀疑的错误使用,每个测试用例仅需要覆盖一个或几个条件。 测试法调试的适用情况 不是完全独立的方法,通常与归纳法一起使用,以获得进行假设和/或证明假设所需的信息;也可以与演绎法一起使用,以排除某些原因,提炼剩下的假设,并/或证明假设。 调试的原则 定位错误的原则 动脑筋 对错误症状的有关信息动脑筋进行分析 如果遇到了僵局,就留到稍后解决 发挥潜意识的作用 如果遇到了困境,就把问题描述给其他人听 描述过程可能会帮助我们发现新的东西 仅将暴力调试作为辅助手段 无计划、盲目、成功机会小,而且会将新错误引入程序 调试原则——修改错误的技术 存在一个缺陷的地方,很有可能还存在其他缺陷 应纠正错误本身,而不仅是其症状 正确纠正错误的可能性并非100%

您可能关注的文档

文档评论(0)

小米兰 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档