编写程序时,不可避免的会犯错误。每一个程序都离不开反复的调试、修改最终才能完成,所以说,调试程序是编程过程中必不可少的一个过骤,那么,程序调试应该如何做呢?
程序设计中常见的错误可以分为三类:
1.语法错误
2.语义(逻辑)错误
3.运行时错误
语法错误
概念:
在计算机科学中,语法错误是指程序员的语法有误,编译器或解释器在词法分析时无法将其转换为适当的编程语言。在编程语言中,语法错误一定只在编译期出现。
出现原因:
由于不正确的编写代码而产生的非法使用或丢失关键字、遗漏了某些必须的标点符号、函数调用缺少参数或传递了不匹配的参数等等。
解决方法:
无法通过编译,最容易发现和修改。编译器会标识程序中有语法错误的行,可能也会有简单的说明。
语义(逻辑)错误
概念:
与语法错误不同的是,语义错误符合语法规范,代码能通过编译,但逻辑思维有问题,运行结果与预期不符。语义错误的唯一表现就是错误的运行结果。
出现原因:
可能是语句中出现了差错(比如公式写错)、算法中的错误,甚至选择了错误的算法。此外,还有一些其他的原因,如类型转换错误变量作用域错误、遗漏的代码段、对问题或需求的理解有误等等。
解决方法:
语义错误会导致程序运行出错,但还不至于崩溃。逻辑错误会产生意外的输出或结果,但并不一定会立即被发现。
运行时错误
概念:
服务器上出现应用程序错误。
出现原因:
应用程序在运行期间执行了非法操作或某些操作失败,如打开的文件未找到、网络连接断开、除法中的除数为零等等。
解决方法:
视情况而定。
对于语法错误,直接无法通过编译,很容易被我们发现。但是其他错误呢,我们就要通过调试来实现程序的成功运行。
调试的方法分为两种:动态调试和静态调试
静态调试
是指在程序编写完以后,由人工“代替”“模拟”计算机,对程序进行仔细检查、分析源程序代码和排错,不实际运行软件。实践表明,有很大一部分错误可以通过静态检查来发现,大大缩短了上机调试的时间,提高上机效率。
动态调试
调试应用程序的过程中,可以充分控制应用程序的执行过程,包括以不同的方式启动调试过程、中断程序的执行等等。
主要有:
开始执行Go(F5):应用程序开始执行并一直执行下去直到遇到断电或者程序结束。
逐语句Step Into(F11):应用程序开始执行第一条语句然后中断,当遇到有函数调用时,执行过程会进入到被调用函数的内部。
逐过程Step Over(F10):与逐语句相似,但是它不进入到被调用函数的内部,而是把函数调用当作是一条语句来执行。在不存在子函数的情况下和step into的效果是一样的。
Step Out(shift+F11):step out是跳出当前进程,执行完子函数余下部分,并返回到上一层函数。
断点调试:指自己在程序的某一行设置一个断点,调试时,程序运行直接运行到设置断点这一行,然后停下,然后可以按F11一步一步往下调试,调试中,可以在查看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下,我们就可以根据错误提示进行修改了。断点调试适合程序员大概能猜到程序出错的地方在哪时使用,这样不用一步一步进行调试,更加节省时间。
另外,给大家再提供一些程序调试的方法:
1.在程序中输入打印语句。就是在你认为有错误的地方插入打印语句,让语句输出,根据输出语句可以判断代码是否按照正确的方式逐步执行。
这个方法和对分查找法有些相似,对分查找法是用赋值语句或输入语句在程序中的关键点附近注入变量的正确值,然后检查che 程序的输出。如果输出是正确的,则表示错误发生在前半部分,否则,错误发生在后半部分。
2.运行部分程序。有时,因为某段程序的错误导致需要反复执行整个程序,这样会造成资源的浪费,这个时候,可以设法使被测程序只执行需要检查的程序段,以提高效率。
3.借助调试工具。
最近代码出现了问题,所以稍稍研究一下代码调试,不足之处,请大家多多指正。
最后分享一篇最近看到的关于程序调试有意思的文章:
盘点程序员那些奇葩的代码调试方式,第2种觉得挺累!
http://baijiahao.baidu.com/s?id=1601070945384612188&wfr=spider&for=pc