- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
当程序没有按照程序员的预期执行或意外中断时,就产生了错误。调试就是查找错误发生点、错误原因的过程。程序错误是编程实践中常见的问题,既使最有经验的程序员也不能保证一次就编写出没有任何错误的程序。编写程序的大部分时间实际上就是在进行调试,本章将向读者详细讲解错误和错误的调试,通过本章的学习,读者可以识别程序中的错误,并学会调试和修改这些错误的能力,从而编写出高质量的代码。
23.1什么是错误程序错误常直接写做英文的bug,也称为缺陷、臭虫。它指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。将程序错误称为bug是由于计算机发展早期的一件事情。二战期间,哈珀中尉带领他的小组制造了一台称为“马克二型”的计算机。一天,马克二型突然死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。他小心地用镊子将蛾子夹出来,用透明胶布贴到“事件记录本”中,并注明“第一个发现虫子的实例”。此后,计算机界就习惯将计算机的各种非正常事件都称为bug。
按照错误的发生时间不同,可以将错误分成语法错误、链接错误和运行时错误。其中,语法错误发生在编写代码时,也叫编译时错误。链接错误发生在将程序代码链接为可执行程序的过程中。运行时错误则发生在运行程序的过程中。3种错误的排查和解决难度依次为语法错误、链接错误和运行时错误。有时,程序虽然没有发生上述3种错误,但是运行结果却不是预期的,这时就发生了逻辑错误。逻辑错误往往是算法设计错误造成的,本章主要讨论前3种错误类型。
为了处理错误,首先要搞清楚错误的内容和发生时机。这些错误大多发生在编写源代码,并将源代码转换成可执行程序的过程中。下面详细讲解几种常见的错误。
语法错误发生在编写源代码时,指程序中包含了违反语法规则的语句。这类错误在编译时由编译程序自动发现。这类错误很普遍,是初学者最容易犯的错误;也很顽固,即使是最有经验的程序员也难以保证不犯这类错误。
从命令行接受数据并输出。该程序在编译时会输出如下内容。分析:从输出可以看出,该示例共有4个错误。其中,第1个错误是第5行语句中的关键字end书写错误引起的,正确的写法应该是endl。第2个错误是第6行错用了“”符号引起的,输入流应该使用“”。第3个错误就需要仔细理解了。从输出结果看出错误发生在第8行,错误内容中却说是data前缺少“;”号。这说明是第7行缺少“;”号,导致两行连在了一起,但是编译器发现这两行是两条独立的语句,所以提示8行有错。第4个错误是8行括号不全引起的,应该在“3”后补一个“)”。
所有程序员终生都要受语法错误的困扰,即使再小心仔细也难以避免。但是语法错误也是最容易处理和发现的。只要按照提示找到错误点,根据错误内容修改即可。这类错误只能随着经验的积累逐步的减少,却不能根除。有时编译器还会对某些语句给出警告,例如,将浮点数赋给整型数,将很小的数作为被除数等。这些不是错误,但却潜在地存在问题,也是需要高度重视的。
链接错误发生在程序链接时。将编译过的程序与程序使用的库链接生成可执行程序时,如果不能在所有的库和目标文件内找到所引用的函数、变量或标识符,就会产生链接错误。这常常是符号不存在、拼写不正确或者使用错误引起的。
【示例23-2】链接错误的示例代码。该程序编译链接时,会有如下输出。分析:从输出可以看出示例代码除了仅有一个数据转换警告外,已经通过了编译,可以不管这个警告。下面可以看出有3个链接错误。第1个是提示函数fun()找不到。这是因为声明的fun()函数的参数为浮点型,但定义时却错写成了整型,所以链接程序认为找不到参数为浮点型的fun()函数。第2个错误是声明了外部变量x,但是却没有找到定义它的库文件。第3个是提示有两个无法找到的外部引用,所以导致不能链接为可执行程序。
一般来讲,可以将链接错误分为工程内链接错误和工程外链接错误两种。其中,工程内链接错误指工程内使用的对象在链接时未能找到,是代码级别的。工程外链接错误指工程使用的外部对象未能找到,一般是使用外部编译好的库造成的。下面分别予以说明。
这包括函数或变量不存在和函数或变量所在的文件没有被正确编译两种。其中,前者发生的原因是由于函数和变量只声明未定义,函数声明和定义的参数列表不一致,或者拼写错误等。后者是由于函数和变量所在的文件没有加到工程中,预处理宏或条件编译导致函数或变量没有被正确编译等。
2.工程外链接错误01这包括链接的函数或变量没有被正确导入,找不到链接的库文件,调用方式错误等。02?注意:如果程序中用到了外部库或头文件,则需要在“tools\options\”的directories页增加路径,以避免链接错误。
当程序链接完后就生成了可执行文件,这时就可开始程序的执行
文档评论(0)