文档介绍:调试技巧论程序的调试技巧作者:未知文章来源:网络点击数: 447 更新时间: 2004-10-3 论程序的调试技巧【关键字】调试技巧、测试方法、测试用例设计【摘要】本文结合作者自身经验, 对竞赛中程序的调试技巧做了详细的阐述和总结。在介绍了编程中常见的错误类型和集成环境的调试工具之后,给出了一般调试流程,并着重讲述了其中的动态查错技巧, 做了一定的归纳。最后通过一个调试实例来体现本文所论述的调试技巧的具体应用。【正文】一、程序调试的必要性程序设计过程中, 错误是在所难免的。虽然有些程序员认为一个程序可以做到完美无瑕,但实际情况却并非如此,不然就不会有人对 Windows 怨气冲天了。尽管信息学竞赛中所编的程序从来不会像 Windows 那样庞大,最多也是仅仅几百 K 而已,但由于时间有限,选手们的程序难免有疏漏之处。因此,调试就成了极其重要的一环。如何在紧迫的时间内快速准确地发现并改正错误, 正是本文所要讨论的问题。二、常见错误类型归纳《孙子兵法》云: “知己知彼,百战不殆。”对于程序调试者来说, 程序中的错误就好比是敌人, 如能准确把握敌人的情况, 无疑是极为有利的。下面我们就来对常见的一些错误类型进行归纳并给出解决方法。 1、思路错误这要看是基本算法错误还是功能缺陷。前者需要重写大部分代码,是否重写则根据时间是否充裕而定, 后者只需增加一部分代码, 再修改某些地方,这时应全面考虑,以防遗漏应该修改的地方。 2、语法错误这个没什么可说的, 作为一名信息学竞赛的选手, 应该对自己选择的编程语言的语法了如指掌,具体在这里就不多讲了。 3、书写错误这种错误令人十分头痛, 一般的书写错误在编译时都能找出来, 但如果你在表达式中用到变量 j 时误写成了 i ,不但编译程序找不出来, 自己找时也由于两者样子比较相似, 难以发现。排除这种错误只能靠“细心”两字,具体可使用下面要介绍的静态查错法。 4、输出格式错误由于现在信息学竞赛采用黑箱测试法, 由于输出格式错误而导致失分的例子屡见不鲜。一个标点, 一个空格, 都会导致最后的悔恨。因此, 在调试时先要核对输出格式,针对不同输出格式多设计几个测试用例,以防一失足成千古恨。 5、其它编程时易犯的错误除了上面所说的错误类型外, 其它就属于编程时在细节上考虑不周所造成的了。下面仅列举其中一些较为隐蔽的错误。只有靠平时不断总结积累,才能真正的做到“知己知彼”。①变量未赋初值看下面的程序段 For i: =1 toN Do If A[i]>Max Then Max : =A[i] ; WriteLn ( Max ); 这个程序段的原意显然是要输出数组 A 中最大的数。但由于它遗漏了将 Max 赋初值的语句, 因此很可能会出现输出的数并不在数组 A 中的错误。应该在过程开头添上一句 Max : =-MaxInt ;。养成变量使用前先赋初值的习惯能预防许多较隐蔽的错误。②中间运算越界看下面这两句语句 A: =1000 ; B: =A*A Div 100 ; 其中 A,B 都是 Integer 类型。按照我们的想法, 1000*1000 Div 100=10000 。然而当我们察看 B 的值的时候,却发现 B 等于 169 。原因是 Pascal 在进行编译时,总是先计算出 A*A ,把它放到一个中间变量中, 然后再计算出最后结