程序调试教程(1)——错误类型简介

程序调试教程(1)——错误类型简介

Contents

错误类型简介

调试(Debug)

顾名思义,调试(Debug)就是减少 bug 的过程。

但是不同的调试方法可能会造成极大的时间差异,所以这就要求程序员拥有较高的调试技巧。

常见类型

  • 输出调试
  • 断点调试

鉴于作者基本不用后者,所以本篇教程只讲输出调试。

错误类型

编译错误就不列举了。

Wrong Answer(WA)

答案错误,一般可能由算法错误,实现错误导致。

Time Limit Exceeded(TLE)

程序运行超过时间限制,可能是算法复杂度出错,常数过大,以及死循环。

Memory Limit Exceeded(MLE)

程序运行超过内存限制,可能是开的数组太大等等。

Runtime Error(RE)

程序运行时错误,可能是程序运行中栈空间溢出,指针、数组下标越界,除零操作等等。

Output Limit Exceeded(OLE)

程序输出超出限制,一般是输出多余内容,或者输出死循环导致。

Presentation Error(PE)

程序结果正确,但输出格式错误。

Bad System Call

系统调用错误,可能一些与系统相关函数(输入输出)有误。(不特别讲解)

调试基本思路

  1. 找出程序错误类型,可以根据本地测试或者 OJ 返回结果判断。
  2. 根据错误类型猜测可能的算法错误、实现错误。
  3. 在自己的程序中加入一部分输出调试语句(如 cerr),输出部分重要变量值的变化。
  4. 凭自己理解演算程序算法,确定变量应有的值,进行对比,分析出出错位置。
  5. 对出错位置继续分段,或者直接发现问题。

程序调试要求程序员对各种错误类型有清晰认知,对自己实现的算法足够理解,且需要具备一定的将程序分段能力。

除此之外,程序员还应该有极大的耐心、毅力去完成可能十分漫长的调试过程。

OLE 错误

一般是输出了调试信息,这种可以通过尽量使用 cerr 输出调试来避免。

PE 错误

此类错误一般不需要调试,仔细阅读题面,观察自己的输出格式与题目要求是否一致,一般可以通过改正格式获得 AC。

其他类型的错误在之后的教程中会再进行具体分析。(未完待续……)

 

点赞 3

Comments: 2

  1. dreamlee说道:

    十分好奇作者为什么不用断点调试

    • wzf2000说道:

      不是我不用,只是我觉得初学者可以利用输出调试更好地练习提高调试效率QAQ。
      我自己用 VSCode 时也是断点调试,但有时候帮别人要用陌生一点的 IDE 或者编辑器,就会优先选择输出调试。

Add your comment