程序调试反思 — Mysterious Numerals
Mysterious Numerals 从构思到设计到测试并经过不断增加新功能和不断调试,历经24个版本,时间总跨度整整一个月(2023年4月13日至5月16日)。
最后一次调试(v2.4):从发现 bug 到找出错误根源并修复,耗时长达8小时——5月15日17点开始调试到凌晨0点未果;16日早6:30起床继续1小时依然徒劳;中午再调1小时无功而返;晚上苦战2个多小时,终于定位错误根源并修复。
调试方法论总结:
① 插入打印语句(白盒测试,观察每步数据变化,彻底读懂执行过程)
② 用注释切掉无关代码区域,逐步缩小范围向临界区靠近
③ 分而治之策略将问题局部化
④ 改错后立即回归测试并不断调试
⑤ 调试时若出现新bug,乘胜追击改完后再继续改最初的bug
⑥ 良好的设计风格至关重要——不可贪图一时方便造成后患无穷甚至垃圾代码
⑦ 函数内少用全局变量、少用goto
调试就像一步步找病因线索,像侦探游戏。每找到一条线索就离真相更近一步。bug迟迟不消失让人急躁——花了大量时间还试出新bug时甚至会怀疑开发环境而非程序本身。上课上到一半还在想为什么出错,下课没回想内容就赶回宿舍继续调试……太耗时间时甚至想过放弃这好不容易编出的程序。
—— 李义洵 · 2023年5月