编程,程序错误和调试
人总会犯错误,特别是在做非常复杂的事情的时候。

程序是非常复杂的描述,有复杂的语法结构和复杂的语义,也可能很长。在做编程工作的事情,人写出的程序经常包含一些错误,以至根本无法进入运行的阶段,或者是能运行但不能得到所需的结果(或效果)。

首先应该记住:程序里的错误都是(我们作为)编写程序的人犯的错误。初学者常常会认为自己没错,一定是使用的系统弄错了。而有经验的程序员和专家遇到系统报告错误时,总是首先想到一定是自己在什么地方犯了错误,设法找出程序里的错误并更正之。

编写出来的程序里的错误可以分为三大类:

  1. 写出的程序正文可能有语法错误,根据系统给出的提示比较容易查找和更正。

  2. 程序正文可能包含静态语义错误(类型错误),也比较容易纠正。

  3. 可以执行的程序(无语法和静态语义错误的程序)可能有三种不同的(动态)语义错误:

    • 运行中报告错误,程序非正常终止。例如遇到除数为 0 等不正常的情况;

    • 运行永远不能结束(程序不断地重复执行某些操作而不能终止),也称为死循环;

    • 程序运行正常结束,但得到的结果(或产生的效果)不符合需要,这就说程序里存在着逻辑错误。
在编写出一个程序的代码之后,首先要排除其中的语法和静态语义错误,得到一个良结构的程序。完全排除了这些简单错误之后,才得到了一个可以运行的程序。

对于能运行的程序,需要系统化地进行一系列运行试验,设法确认它确实能满足我们的需要。

程序运行中发现的错误现象可以分为三类:

  1. 程序在试运行中产生动态运行错误,报告错误信息后停止。这种错误容易识别。

  2. 程序在运行中陷入死循环,执行很长时间也不能得到结果。这种错误的判断要基于对程序可能运行时间的正确估计。程序完全可能运行很长时间,因此要确定一个程序是正在做正确的事情,现在还没做完,还是已经陷入的死循环,并不容易。

  3. 得到的结果(或运行的效果)不满足我们的需要。要做出这个判断,必须知道程序应该得到什么结果(或效果),这件事有时也不容易确定。
试验性地运行程序的工作称为程序的测试(testing)。如果在测试中发现了错误,就要设法排除之,这种工作被称为debugging,或者调试(排除错误)。
本页及相关页面(除另声明者外)由裘宗燕创建维护,可自由用于各种学习活动。其他使用需得到作者许可。