09 程序除错技巧指南

不管在哪个阶段,在写程序时总是会遇到大大小小的问题,不是程序不照着你的想法走,就是他连动都不想动。在今天我想要分享几个办法让各位遇到臭虫时要如何解决,以及要如何减少臭虫出现的机会。

  1. 黄色小鸭除错法 (Rubber Duck Debugging)

小时候我写专题用的程序时,Debug 的时间总是比写出来的时间长,因此我常常在爸爸回家的时候拿电脑去问他。很好笑的事,几乎每次拿去问时,都是我讲到一半就发现自己错在哪里,又自己一个人躲回房间,殊不知他完全没有在听 (不要打我)。而某天之後他半开玩笑的拿了一只 Yahoo! 的紫色鸭鸭给我,和我说只要遇到问题可以讲给他听。之後就被我丢到浴室了

https://ithelp.ithome.com.tw/upload/images/20210923/20103852CJsOKjcmqo.png

以上都是真人真事,但我那时候还不知道真的有人为这种除错的方法命名,而且还真的叫做黄色小鸭除错法。这不但是最简洁有力,不需要任何工具,且可以在任何时候在脑袋思考的除错法,也是个人认为效率最高的除错法,多多做这种练习能够让程序组织能力加强许多。

  1. Print 大法

当黄色小鸭法也没有用,或是脑袋已经撑不住时可以尝试直接把有疑虑的地方印出来,使用正确的测试资料,再这样的方式一定会找到问题的根源。在众多编辑器中也有侦错器能够一步一步印出程序运行的步骤,在各种 C++ 的 IDE (APCS 内装的) 也都有支援,若有需要也可以学习怎麽使用侦错器,但同时也不要因为过於方便而太依赖它,有时反而会没办法将问题聚焦导致更难找到问题。

  1. 善用 const

变数有很多不同的功用,而在不同程序语言中也会有不同的修饰方法让每个变数的定位更明显。而在 C 语言中的 const 则是有防止传递的函数参数不被修改的功用。不仅是变数,函式也可以用 const 去不让此函式有改到任何变数的可能性,如此一来一遇到变数上的问题,本应该从头到尾看一遍的程序就会变得简单很多。

  1. 排版很重要

排版就像是刚学写字的小孩一样,是在初学程序时很常遇到的问题之一。若是没有良好的排版习惯,不仅别人在看程序时会耗费很多时间在本不需要浪费的时间上外,自己也很容易被自己潦草的程序搞得团团转。虽然至今仍然有许多人对排版的最佳方法争论至今,但写出乾净且易读的程序前,学习利用排版增加可读性是必要的。

  1. 有意义的命名变数

在许多程序竞赛中,题目就会将预设的变数取为 a, b, N, M, K 等单一字母,虽然这部分是题目定好的,但在自己创造变数时要注意不要变数无意义的取名。不仅影响可读性(别人会看不出在做什麽)外,这些无厘头的命名方式也会让自己的脑袋中装一些本来不需要装的东西,导致思考速度下降。


在进阶的程序设计中,还有很多技巧能够让错误出现的频率降低,像是不要同时存在多个可修改的 pointer 指向同个位置或是 self explanation 和 function 不要写太大等等 (感谢队友 bogay, JacobLinCool 补充),都会在程序实战中慢慢体会到并吸收,若是没有尝试过以上的方法,的不妨试试看适不适合自己喔。


<<:  [Part 2 ] Vue.js 的精随-元件 Props

>>:  Day 11:想要快速产出元件及范本,就用 Angular CLI 吧!(一)

D06 / 为什麽 Modifier 的顺序不能乱写 - Modifier

今天大概会聊到的范围 Modifier 的运作 Modifier 是我们在 Compose 系统中...

GitHub Actions 基本介绍 - 开始自动化 workflow 的第一步

使用 GitHub Actions 可以让 GitHub Repo 内自订且自动执行你的软件开发流程...

视觉化KBARS日K(1)-java controller

1分K视觉化的功能昨天已经完成, 今天要尝试将1分K组成日K做展示, 我会示范一个土法炼钢的方式, ...

#8 Web Layout: RWD

What is RWD? “Responsive web design (RWD) is a des...

[day12]串接API实测-永丰订单查询API(日期查询)

订单单笔查询API设定 系统需要留存所有订单资讯,配合缴款截止日,设定每天抓取两日前资料进行资料留存...