




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《高级语言程序设计》11年4月14日星期四经验与技巧─程序调试11年4月14日星期四•••从电脑诞生之日起,就有了电脑Bug。第一个有记载的bug是美国海军的程序员,编译器的发明者格蕾斯·哈珀(GraceHopper)发现的。1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二号”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”从此以后,人们将计算机错误戏称为虫子(Bug),而把找寻错误的工作称为(Debug)。“Bug”与“Debug”的来历
MarkII11年4月14日星期四Bug和Debug•没有Bug的就不是软件•核心的问题是:✦怎样在软件中查出这个Bug?✦怎样修正这个Bug?✦怎样发现产生Bug的根源?11年4月14日星期四初学者的困惑•在错误面前一筹莫展✦根本就不单步跟踪程序,或者不敢往下层函数跟踪✦拼命的单步跟踪,但却不知道该关心什么?•总是发现编译器的“Bug”•总是编辑并祈祷✦随便的,没有目的的修改代码,祈求奇迹的出现11年4月14日星期四软件开发的困难•软件总是需要修改✦✦✦✦添加新特性解决bug优化重构•而修改软件又是危险的举动我们如何得知已经正确的完成了修改?我们如何得知没有破坏任何(既有的)东西?
✦ ✦11年4月14日星期四Bug的种类•程序设计中常见的Bug可以分为三种:✦编译错误✦运行时错误✦逻辑错误11年4月14日星期四编译错误•编译错误是指程序在编译过 程中出现的错误。它是由于 不正确的编写代码而产生的 如非法使用或丢失关键字、遗漏了某些必需的标点符号、函数调用缺少参数或传递了不匹配的参数等等。inti;intarray[5];fore(i=0;i<=5;i++){array[i]=0;!}11年4月14日星期四‣例:数组下标越界是一种典型的运行时错误
运行时错误✦运行时错误是指应用程序在运inti;
行期间执行了非法操作或某些intarray[5];
操作失败,如打开的文件未找 到、磁盘空间不足、网络连接for(i=0;i<=5;i++)
断开、除法中除数为零等等;{array[i]=0;!}11年4月14日星期四逻辑错误•逻辑错误是指应用程序未按照预期的方式运行时所产生的错误。一般来讲,这不是属于语法层次的错误,应用程序可以执行,但是得不到正确的预期结果。•例:对于一个数组的初始化,预期对其某个特定位置赋初始值,其余置零,那么在这段代码完成后intarray[100];array[55]=55;for(inti=0;i<100;i++)array[i]=0;
{! }
就没有得到我们预期的结果(代 码执行顺序的逻辑错误)。11年4月14日星期四Bug的定位•关注接口✦从上层逐渐往下层排查,将断点设在上层函数的入口,单步执行跟踪程序的流程,将搜索的方位逐渐缩小,最后定位在一个函数内部•关注溢出✦C语言的灵活性,指针的应用,以及C语法的宽容性很容易造成代码的错误,这其中最主要的就是内存单元的溢出,我们需要注意譬如strcpy();scanf();gets()等函数的目的缓冲区是否越界•关注边界数组的上限循环的次数输入参数的极限情况(0,空,负数,最大的情况等等)
✦ ✦ ✦11年4月14日星期四Bug的修改•别急着改,想想,再想想,想清楚了再动手。•考虑所作的修改可能会对系统造成的新的影响是什么?•我的修改会对其他人的代码造成影响吗?•是否会对全局的数据结构或者函数接口定义作修改?如果是,如何通知所有的其他人?•修改完了,应该有详细的文档,代码注释,并对修改过的代码进行回归测试11年4月14日星期四Debug过程••••代码检查(CodeReview)编译器的警告好的CodingStyle调试✦三种方法‣‣‣单步调试测试用例预定义宏11年4月14日星期四“橡皮鸭程序调试法”••••••1.找一个橡皮鸭子。你可以去借,去偷,去抢,去买,自己制作……反正你要搞到一个橡皮鸭子。2.把这个橡皮鸭子放在你跟前。标准做法是放在你的桌子上,电脑显示器边,或是键盘边,反正是你的跟前,面朝你。3.然后,打开你的源代码。不管是电脑里的还是打印出来的。4.对着那只橡皮鸭子,把你写下的所有代码,一行一行地,精心地,向这只橡皮鸭子解释清楚。记住,这是解释,你需要解释出你的想法,思路,观点。不然,那只能算是表述,而不是解释。5.当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法,观点,或思路和实际的代码相偏离了,于是你也就找到了代码中的bug。6.找到了BUG,一定要记得感谢一下那个橡皮鸭子哦。11年4月14日星期四“橡皮鸭程序调试法”••为什么这个方法要叫做橡皮鸭呢?因为橡皮鸭子是西方人在泡澡时最喜欢玩的一个小玩具,所以,这个东西应该家家户户都必备的。因为,这个方法由西方人发明,所以,就被取名为“橡皮鸭”了。你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的
确有效。因为,这就是“CodeReview”的雏形!
Onceaproblemisdescribedinsufficient detail,itssolutionisobvious. “一旦一个问题被充分地描述了他的细节,那么解决方法也是 显而易见的。”11年4月14日星期四编译器的警告•Error&Warning•编译器的警告要认真对待•应该尽量编写没有警告的代码•除非你确切的知道编译器为什么产生警告,以及后果•有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他说:“你知道不知道这个东西会危害你的健康?我是说,你有没有注意到香烟盒上的那个警告(Warning)?”小伙子说,“没事儿,我是一个程序员”。11年4月14日星期四•编码风格Thus,programsmustbewrittenforpeopletoread,andonlyincidentallyformachinestoexecute.$$《StructureandInterpretationofComputerPrograms》
缩进和空白
•注释
•命名
•函数11年4月14日星期四
Debug的方法和工具•一般的Debug工具都提供以下功能:pointandWatchpoint)
✦断点与数据观测点(Break
✦单步(Step)
✦变量的观察与修改(Watch)
✦现场演示....11年4月14日星期四
Debug的方法和工具•一般的Debug工具都提供以下功能:pointandWatchpoint)
✦断点与数据观测点(Break
✦单步(Step)
✦变量的观察与修改(Watch)
✦现场演示....11年4月14日星期四快捷键1、设置断点,F9(开关键):可设置多个,一般在疑点代码行2、F5(GO)让程序运行到光标所在行。 此功能将全速执行程序直到遇到一个断点或程序结束,或直到程序暂停等待用户输入.2、单步跟踪:F10(stepover)与F11(StepInfo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年机动车零部件及配件项目建议书
- 2025-2030农业保险行业兼并重组机会研究及决策咨询报告
- 2025-2030内视镜摄像头行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030全球及中国联络中心系统行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国祛痰药市场未来趋势及前景竞争力策略研究报告
- 2025-2030全球及中国痴呆症药物行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国电动巴士行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国汽车头枕杆行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国教育数字出版行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国扭矩校准服务行业市场现状供需分析及投资评估规划分析研究报告
- 箱式变电站吊装方案设计规范
- 期末考试-公共财政概论-章节习题
- MOOC 走进舞蹈艺术-首都师范大学 中国大学慕课答案
- AED急救知识课件
- 2023版《思想道德与法治》(绪论-第一章)绪论 担当复兴大任 成就时代新人;第一章 领悟人生真谛 把握人生方向 第3讲 创造有意义的人生
- 2023年水处理BOT合同模板范本
- mil-std-1916抽样标准(中文版)
- 监控施工方案范文六篇
- 支气管镜麻醉
- 2023-2024苏教版七年级数学上册期末试卷
- 少数民族民歌 课件-2023-2024学年高中音乐人音版(2019)必修 音乐鉴赏
评论
0/150
提交评论