对调试与优化的理解与认识

上传人:鲁** 文档编号:509797771 上传时间:2023-02-09 格式:DOCX 页数:13 大小:18.92KB
返回 下载 相关 举报
对调试与优化的理解与认识_第1页
第1页 / 共13页
对调试与优化的理解与认识_第2页
第2页 / 共13页
对调试与优化的理解与认识_第3页
第3页 / 共13页
对调试与优化的理解与认识_第4页
第4页 / 共13页
对调试与优化的理解与认识_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《对调试与优化的理解与认识》由会员分享,可在线阅读,更多相关《对调试与优化的理解与认识(13页珍藏版)》请在金锄头文库上搜索。

1、20132014年第二学期调试与优化期末论文对调试与优化的理解与认识院系:软件学院专业:移动应用开发班级:移动二班学号:1215115669 姓名:王玉峰任课教师:许豪目录1. 概念32. 释义41. 静态调试42. 动态调试53. 步骤61. 程序调试编辑62. 程序优化编辑71. 概念编辑72. 第一级:代码调整编辑73. 第二级:新的视角编辑84. 第三级:表驱动状态机编辑95. 结论编辑93. 调试的原则104. 调试方法11一,简单调试方法:114. 感悟12参考资料:12对调试与优化的理解与认识【摘要】程序调试是将编制的程序投入实际运行前,用手工或编 译程序等方法进行测试,修正语法

2、错误和逻辑错误的过程。这是保证 计算机信息系统正确性的必不可少的步骤。编完计算机程序,必须送 入计算机中测试;程序优化是指对解决同一问题的几个不同的程序, 进行比较、修改、调整或重新编写程序,把一般程序变换为语句最少、 占用内存量少、处理速度最快、外部设备分时使用效率最高的最优程 序。【关键字】调试、优化、程序、作用、理解、认识【正文】1. 概念调试是编好程序后,用各种手段进行查错和排错的过程。作为程 序的正确性不仅仅表现在正常功能的完成上,更重要的是对意外情况 的正确处理。从心理学的角度考虑,开发人员和调试人员不应该是同 一个人。优化是科学研究、工程技术和经济管理等领域的重要研究工具。 它所

3、研究的问题是讨论在众多的方案中寻找最优方案,是指为了更加 优秀而“去其糟粕,取其精华”为了在某一方面更加出色而去其糟 粕;为了在某方面更优秀而放弃其他不太重要的方面;使某人/某物 变得更优秀的方法/技术等。在计算机算法领域,优化往往是指通过 算法得到要求解问题的更优解。2. 释义程序调试是将编制的程序投入实际运行前,用手工或编译程序等 方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信 息系统正确性的必不可少的步骤。编完计算机程序,必须送入计算机 中测试。调试共分为两种:静态调试和动态调试。1. 静态调试可以米用如下两种方法:(1)输出寄存器的内容。在测试中出现问题,设法保留现场信息

4、。 把所有寄存器和主存中有关部分的内容打印出来(通常以八进制或十 六进制的形式打印),进行分析研究。用这种方法调试,输出的是程 序的静止状态(程序在某一时刻的状态),效率非常低,不得已时才 采用。(2)为取得关键变量的动态值,在程序中插入打印语句。这是取得 动态信息的简单方法,并可检验在某时间后某个变量是否按预期要求 发生了变化。此方法的缺点是可能输出大梁需要分析的信息,必须修 改源程序才能插入打印语句,这可能改变关键的时序关系,引入新的 错误。2. 动态调试通常利用程序语言提供的调试功能或专门的调试工具来分析程 序的动态行为。一般程序语言和工具提供的调试功能有检查主存和寄 存器;设置断点,即

5、当执行到特定语句或改变特定变量的值时,程序 停止执行,以便分析程序此时的状态。程序优化是指对解决同一问题的几个不同的程序,进行比较、修 改、调整或重新编写程序,把一般程序变换为语句最少、占用内存量 少、处理速度最快、外部设备分时使用效率最高的最优程序;优化是 科学研究、工程技术和经济管理等领域的重要研究工具。它所研究的 问题是讨论在众多的方案中寻找最优方案。例如,工程设计中怎样选 择设计参数,使设计方案既满足设计要求又能降低成本;资源分配中, 怎样分配有限资源,使分配方案既能满足各方面的基本要求,又能获 得好的经济效益;在人类活动的各个领域中,诸如此类,不胜枚举。 优化这一技术,正是为这些问题

6、的解决,提供理论基础和求解方法, 它是一门应用广泛、实用性很强的科学。优化包括寻找最小值和最大 值两种情况。寻找函数f的最大值等价于一f最小值寻优,所以两种 情况可归结到一起研究。3. 步骤1.程序调试编辑第一步,用编辑程序把编制的源程序按照一定的书写格式送到计算机 中,编辑程序会根据使用人员的意图对源程序进行增、删或修改。 第二步,把送入的源程序翻译成机器语言,即用编译程序对源程序进 行语法检查并将符合语法规则的源程序语句翻译成计算机能识别的“语言”。如果经编译程序检查,发现有语法错误,那就必须用编辑 程序来修改源程序中的语法错误,然后再编译,直至没有语法错误为 止。第三步,使用计算机中的连

7、接程序,把翻译好的计算机语言程序连接 起来,并扶植成一个计算机能真正运行的程序。在连接过程中,一般 不会出现连接错误,如果出现了连接错误,说明源程序中存在子程序 的调用混乱或参数传递错误等问题。这时又要用编辑程序对源程序进 行修改,再进行编译和连接,如此反复进行,直至没有连接错误为止。 第四步,将修改后的程序进行试算,这时可以假设几个模拟数据去试 运行,并把输出结果与手工处理的正确结果相比较。如有差异,就表 明计算机的程序存在有逻辑错误。如果程序不大,可以用人工方法去 模拟计算机对源程序的这几个数据进行修改处理;如果程序比较大, 人工模拟显然行不通,这时只能将计算机设置成单步执行的方式,一 步

8、步跟踪程序的运行。一旦找到问题所在,仍然要用编辑程序来修改 源程序,接着仍要编译、连接和执行,直至无逻辑错误为止。也可以在完成后再进行编译。2程序优化编辑1. 概念编辑优化前需要问自己的几个问题:为什么要优化、优化的目标是 什么、哪些部分才需要优化、能够接受由此带来的可能的资源消耗(人 力、维护、空间等)吗?程序优化有三个层级。它们依次产生更显著的优化代码,在考虑 优化方案时可以尝试从不同的层级着手思考优化的方案:(也许有人表达过这些观点了,但这也是我对优化的实际理解; 我的分类方法主要依据了具体去实现一个优化时思考问题的切入角 度来划分的,有时候他们之间的界限也并不明显,具体是不是产生更 显

9、著的优化效果也不是确信的)2. 第一级:代码调整编辑代码调整是一种局部的思维方式;基本上不触及算法层级;它面 向的是代码,而不是问题;所以:语句调整,用汇编重写、指令调整、换一种语言实现、换 一个编译器、循环展开、参数传递优化等都属于这一级;这个级别的优化需要掌握大量的小的优化技巧和知识,需要不断 的积累;简单的语句调整,公共表达式提取、废代码删除等当前的很多编 译器也能做到了,但也需要了解一些编译器的优化能力使自己的代码 配合编译器做好优化;用汇编重写并不是简单把高级语言改写为汇编实现,那样写的汇 编很可能没有当今的编译器产生的代码好,所以如果决定用汇编实 现,那就应该按照汇编的角度来规划自

10、己的实现,适当的参考编译器 生成的汇编码也是可取的(特别是新手,我也一样);在某些领域,使 用CPU的新特性和新的指令集等将产生巨大的性能收益,这些地方 经常采用汇编来实现。3. 第二级:新的视角编辑新的视角强调的重点是针对问题的算法;即选择和构造适合于问 题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的) 很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法 实现),而在面对实际问题时“新的视角”提示我们应该重新检视这 些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法;发掘问题的本来意义,从不同的角度思考面对的问题,使用适合 于问题的的算法;尝试打破一些规则,发

11、掘和怀疑自己的某些假定, 恢复问题的本来面目;4. 第三级:表驱动状态机编辑将问题抽象为另一种等价的数学模型或假想机器模型,比如构造 出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果 更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是 他的投影);这一级一般可以产生无与伦比的快速程序,要达到这一级需要大量修炼的;并且思考时必须放弃很多已有的 概念或者这些概念不再重要,比如:变量、指针、空间、函数、对象 等,剩下的只应该是那个表驱动状态机;我想把这种境界描述为: 空寂中,一些输入驱动着一个带有状态的机器按设定好的最短路线运 转着;除此之外have nothing;既:把解决

12、一个问题的算法看作一个 机器,它有一些可变的状态、有一些记忆、有一些按状态运行的规则, 然后一些输入驱动这个机器运转;这就是第三级要求的思考优化问题 的切入点,也就是寻找一部机器,使它运行经过的路径最短(可能是 速度也可能是空间等等)5. 结论编辑要掌握一级优化,是很多人经过努力都能够达到的层次,需要的 是不断的积累各方面的技巧就行了 (虽然很繁琐),写出的代码可以称为“好的代码”;要掌握二级优化,需要的是对问题的理解能力和一些创造力,能 够针对问题产生新的见解;写出的代码可以称为“优秀的代码”要掌握三级优化,必须具有丰富的想象力和创造力,需要大量的 修炼和对问题本质的苦苦思索;写出的代码可以

13、称为“非凡的代码”; 能够将这三个层级的优化熟练运用(我想把这种境界称作“综级优化”) 的人必须掌握比别人更多的知识、了解更多的知识领域、了解最底层 的技术和最高层的抽象;并且还要求有丰富的实践经验、想象能力和 创造能力;这些都是不可或缺的;3. 调试的原则一,用头脑去分析思考与错误征兆有关的信息。二,避开死胡同。三,只把调试工具当做手段。利用调试工具,可以帮助思考,但不能 代替思考,因为调试工具给的是一种无规律的调试方法。四,避免用试探法,最多只能把它当做最后手段。五,再出现错误的地方,可能还有别的错误。六,修改错误的一个常见失误是只修改了这个错误的征兆或这个错误 的表现,而没有修改错误本身

14、。如果提出的修改不能解释与这个错误 有关的全部线索,那就表明只修改了错误的一部分。七,注意修正一个错误的同时可能会引入新的错误。八,修改错误的过程将迫使人们暂时回到程序设计阶段。修改错误也 是程序设计的一种形式。九,修改源代码程序,不要改变目标代码。4调试方法一,简单调试方法:1,在程序中插入打印语句、优点是能够显示程序的动态过程,比较 容易检查源程序的有关信息。确定是效率低,可能输入大量无关的数 据,发现错误带有偶然性。2, 运行部分程序。有时为了测试某些被怀疑有错的程序段,却将整 个程序反复执行许多次,在这种情况下,应设法使被测程序只执行需 要检查的程序段,以提高效率。3, 借助调试工具。

15、目前大多数程序设计语言都有专门的调试工具, 可以用这些工具来分析程序的动态行为。二,回溯法排错。确定最先发现错误症状的地方,人工沿程序的 控制流往回追踪源程序代码,直到找到错误或范围。三,归纳法排错。是一种系统化的思考方法,是从个别推断全体 的方法,这种方法从线索(错误征兆出发),通过分析这些线索之间 的关系找出故障。主要有4步:(1)收集有关数据。收集测试用例,弄清测试用例观察到哪些错误 征兆,以及在什么情况下出现错误等信息。(2)组织数据。整理分析数据,以便发现规律,即什么条件下出现 错误,什么条件下不出现错误。(3)导出假设。分析研究线索之间的关系,力求找出它们的规律,从 而提出关于错误的一个或多个假设,如果无法做出假设,则应设计并 执行更多的测试用例,以便获得更多的数据。(4)证明假设。假设不等于事实,证明假设的合理性是极其重要的, 不经证明就根据假设排除错误,往往只能消除错误的征兆或只能改正 部分错误。证明假设的方法是用它解释所有原始的测试结果,如果能 圆满地解释一切现象,则假设得到证明,否则要么是假设不成立或不 完备,要么是有多个错误同时存在。四,演绎法排错。设想可能的原因,用已有的数据排除不正确的 假设,精化并证明余下的假设。五、对分查找法。如果知道每个变量子啊程序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号