返回

静默Debug:麻省理工教你消灭脱发隐患,打造Debug新境界!

闲谈

在计算机科学的海洋里,debug是一项神圣且艰巨的任务,但它也总能带来意外的幸福和成就感。麻省理工大学的缺失的一课(Missing smester)中,有这样一段关于debug的话:debug是一项神圣且艰巨的任务,你脱发与否,并不取决于发量,而取决于你debug的次数与频率!

那么,debug究竟是一项怎样高贵的技艺呢?有人说,debug 是让人脱发的技艺。也有人说,debug是培育忍耐与毅力,是养成内视与洞察的技艺,是让严谨与准确,甚至诚实和良知,与技术结合,进而修炼成技艺与艺术的实践。这些感言没有轻重之分,然而它们都诠释了debug,尤其是"调试软件"所代表的技艺精神。

在江湖上飘荡的人们,难免都会有脱发的困扰,我们应当积极备战,投身于学习和掌握debug技艺的伟大实践当中。尤其是编程界的人士,应该更加善待自己。当然,debug只不过是计算机技艺里的一项,还有一些人脱发的原因是数学不好、算法讲不通。

很多时候,我们的程序调试也许从静态debug开始,沿着动态debug的方向发展。静态debug,顾名思义,就是指在程序执行开始前通过简单的检查就可以发现程序存在的一些问题。而动态debug是伴随着整个debug过程的,它要求程序先执行,再在执行中或者执行以后发现程序存在的一些问题,继而找到错误代码。

这两种debug方式,各有它们的侧重点。静态debug容易被我们发现,它一般也能比较快的得到解决;动态debug则相对麻烦一些,它一般比较隐蔽,解决起来也比较困难。

对于静态debug,这里就不再赘述,反而会提到一些特别需要关注的方面:

  • 熟悉编译器和IDE报出的错误提示的信息。当我们调用的API、库或者运行环境发出错误信息时,通过对这些错误提示信息的处理就能够修复很多看似疑难的bug,因此,在debug开始之前,做到这一点非常关键。

  • 熟悉源代码文件类型。有些编程新手往往会对于代码的缩进、空格和换行符等内容有纠结,这些是与编程习惯和代码样式设置等习惯相关的内容,而不会影响到代码的最终功能实现。总之,熟悉自己的代码格式,对debug时发现的错误提示要做到针对性理解。

  • 养成阅读文档的习惯。阅读文档,尤其是API和库的官方说明是非常好的习惯,因为其中的内容会对如何修复遇到的这些错误给出指导。通常,阅读官方文档会带来很多见闻和洞见,也将帮助理解出现错误的真正原因。

  • 习惯于自定义打印输出。如果出现疑惑,调试算法最好的方式就是:在代码关键逻辑处打印出中间量,通过这些中间量的信息就可以推断出程序是否可能已经进入了错误的执行逻辑或者执行结果出了问题。

  • 习惯单元测试。单元测试需要先把编程代码分解成多个小单元,再对这些小单元进行测试,从而能够全面检查这些编程代码的逻辑是否合理,从而发现问题。这种方式虽然需要较大的工作量,但是它能为代码的有效性提供一个大的保障。

  • 学会面向调试。软件工程当中的一条著名的建议就是,面向调试来构建软件。这一点与面向测试、面向安全等的要求是一致的。如果软件程序编写时就开始注意调试的可调试性,那么程序一旦进入到debug的工序,调试起来就会相对轻松。

除了掌握以上这些debug的策略,我们还有必要提高自身的技术专业度,包括对算法的掌握、对各种程序的熟悉、对programming paradigm的理解以及软件开发的理念等。

掌握更高的技术专业度,意味着掌握了能够灵活应用各种技术工具的能力,比如,熟悉Python的Debug工具、使用Shell Script调试应用程序以及掌握JavaScript调试技术等。这显然与当前人才市场的要求是一致的。

总之,学会静默debug,我们才不脱发。