- 1、本文档共95页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
程序改错第1页
2程序改错是个大悲大喜过程,一天之内能够让人在悲伤低谷和喜悦巅峰之间跌宕起伏。假如改过了成千上万个错误,……改错很像侦破案件,有坏事发生了,而仅有信息是它确实发生了。必须从结果出发,逆向思索第2页
3程序改错改错第一步是找犯错误根源,然后对症下药寻找错误根源过程称为调试。第3页
4程序改错难点在于:症状和根源可能相隔很远有些人问阿凡提:“我肚子疼,该用什么药?”症状可能在另一个错误被纠正后暂时消失症状并不是某个程序错误引发,如误差累积症状可能时隐时现,如“内存泄露”极难产生完全一样输入条件,难以恢复“错误现场”第4页
5程序中常见犯错原因编译错误指在编译过程中发觉错误,通常属于语法错误,即编写语句不符合C语言语法规则。Undefinedsymbolxxx标识符xxx未定义Expressionsyntaxerror表示式语法错误Toofewparameterincall函数调用时实参少于函数形参第5页
6程序中常见犯错原因运行错误指在程序运行时发生错误往往是因为语义上错误造成,即语句即使合乎语法,但要求计算机去做不该做或做不到事情。比如当用0做除数时,运行后将显示“Divisionbyzero”错误提醒信息,并马上返回编辑屏幕。查看运行结果时,可在Userscreen(用户屏幕)上看到给出错误提醒信息。第6页
7逻辑错误程序中有逻辑错时,不影响程序运行并得到运行结果,只是运行结果不正确。比较隐蔽,犯错后不易查找。累加求和运算时,累加和变量忘记了赋初值;累乘运算时,累乘变量初值赋值为0;函数申明时返回值数据类型与实际返回数据类型不一致,造成自动类型转换数组下标越界(即超出了定义范围);程序中存在死循环;程序中常见犯错原因第7页
8程序改错在程序设计语言发展中,一个主要努力方向就是想经过语言特征设计帮助防止错误以下标范围检验,受限制指针甚至完全取消指针,内存回收,强类型检验但没有任何语言能预防我们犯错误,每个为预防一些问题而设置语言特征都会带给它本身额外代价作为程序员应知道所用语言中有潜在危险和引发错误倾向那些语言特征如goto语句,全局变量,无限制指针,自动类型转换世界上最好调试工具是那些有经验人第8页
9调试基本方法“粗分细找”定位大致范围:归纳、推理、二分、排除缩减输入数据设法找到能造成失败最小输入采取注释方法切掉一些代码降低相关代码区域,调试无误后再将它们打开注释,即采取分而治之策略将问题局部化利用调试工具逐条语句跟踪插入打印语句观看屏幕输出结果第9页
10错误案例关系运算符==错写成赋值运算符=if(a=b)printf(yes);/*运行结果错误*/Warning:Possiblyincorrectassignmentinfunctionmainif(a==b)printf(yes);/*正确*/=表示赋值操作==表示比较是否相等操作第10页
11错误案例while后面有分号while(n100);{……n++;}循环体为空语句,造成死循环for后表示式2省略for(n=1;;n++)/*死循环*/第11页
12错误案例判断字符是大写字符或者小写字符(a=ch=z)||(A=ch=Z)/*不提醒任何错误,但造成运行结果错误*/(ch=ach=z)||(ch=Ach=Z)/*正确*/判断字符是数字字符0=ch=9/*不提醒任何错误,但造成运行结果错误*/ch=0ch=9/*正确*/第12页
13错误案例数据类型由高向低赋值时,进行类型转换后造成信息丢失doublea,b;intsum;sum=a+b;TC下编译,不提醒任何错误VC下编译warningC4244:=:conversionfromdoubletoint,possiblelossofdata第13页
14错误案例函数申明时返回值类型与实际返回数据类型不一致,造成自动类型转换doubleAdd(doublea,doubleb){intsum;……returnsum;}不提醒任何错误intAdd(doublea,doubleb){doublesum;……returnsum;}warningC4244:return:conversionfromdoubletoint,possiblelossofdata第14页
15错误案例数组下标越界inta[10],i,sum;for(i=1;i=10;i++) s
文档评论(0)