如果你是程序员,调试将是你职业生涯的重要过程。调试可以帮我们找到自己的错误,看清别人的代码。其重要性不言而喻。以前在一个公司做过,项目组长经常在没有什么紧急任务的时候,把以前系统中出现过的一些Bug,让我们进行调试。有人说,这是体力活,学不到什么实质的东西,例如核心算法和数据结构。他可能说对了一部分,但另一方面是,优秀的算法是离不开调试的。几乎没有一个好的算法,是在纸上写写,不需要到计算机上进行调试和模拟的。既然如此,下面我就说说调试的一些经验,仅供参考,欢迎拍砖。
首先,耐心。这是非常重要的,永远不要对出现的错误抱有侥幸的心理,希望两三分钟或者两三小时可以解决。只有做最坏的打算,才会在一遍一遍失败之后,而仍然抱有成功的希望。记得以前调试一个多核模拟器的时候,在Unbuntu上搭建环境,出现了很多错误,在网上查了很多东西,都没有解决,连死的心都有。后来我就不关心它了,转而干别的。在这个过程中,我又试着把模拟器安装在其它多个Linux发行版上面,如CentOS,Fedora和Debian。出现错误,我就上网查资料,解决一段时间不行,就换一个Linux操作系统试试。最后,历时将近两个月,终于把环境搭建成功。(可见,我也是很笨的呀!)
其次,一定要对你调试的东西,有个大范围的了解。这样是确保犯一些低级的错误。因为我们调试的时候,往往是从错误的现象出发,去找可能的原因。有时候这个错误现象反映的问题,并不能直击问题的核心。要经常问自己,“这个系统或者这个软件,正常运行,必需要做到哪几点?”,然后,逐个验证这几点。
再者,顺藤摸瓜,抽丝剥茧。这是直观的方法,从错误出发,上网查找资料,幸运的话可以直接找到解决问题的方法。采用这种方法,一定要保证思路清晰。从问题出发,考虑可能导致问题的一些因素。用笔写下来,是一个良好的习惯,永远不要对自己的记忆力过于相信。
最后,要将调试中遇到的问题和经验,随时记录下来。我觉得博客就是一个很好的地方,既可以整理和总结自己的思路,也可以与别人分享和交流。助人为乐,何乐不为!