程序调试教程(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
系统调用错误,可能一些与系统相关函数(输入输出)有误。(不特别讲解)
调试基本思路
- 找出程序错误类型,可以根据本地测试或者 OJ 返回结果判断。
- 根据错误类型猜测可能的算法错误、实现错误。
- 在自己的程序中加入一部分输出调试语句(如
cerr
),输出部分重要变量值的变化。 - 凭自己理解演算程序算法,确定变量应有的值,进行对比,分析出出错位置。
- 对出错位置继续分段,或者直接发现问题。
程序调试要求程序员对各种错误类型有清晰认知,对自己实现的算法足够理解,且需要具备一定的将程序分段能力。
除此之外,程序员还应该有极大的耐心、毅力去完成可能十分漫长的调试过程。
OLE 错误
一般是输出了调试信息,这种可以通过尽量使用 cerr
输出调试来避免。
PE 错误
此类错误一般不需要调试,仔细阅读题面,观察自己的输出格式与题目要求是否一致,一般可以通过改正格式获得 AC。
其他类型的错误在之后的教程中会再进行具体分析。(未完待续……)
Comments: 2
十分好奇作者为什么不用断点调试
不是我不用,只是我觉得初学者可以利用输出调试更好地练习提高调试效率QAQ。
我自己用 VSCode 时也是断点调试,但有时候帮别人要用陌生一点的 IDE 或者编辑器,就会优先选择输出调试。