身临其境. 痛哭流涕
我想, 没有哪个程序员没有过漫长而又黑暗的调试经历吧?一说到调试, 必然都是痛苦的表情。
A. 有
B. 没有
调试的基础知识
回顾自己的调试经历,是否有种调试调到海枯石烂. 天荒地老,山无棱. 天地合,乃敢调出来的感觉,是不是想着和bug同归于尽了?
来看一份地府调试指南说明书,看看你熟练掌握了其中几条呢。
地府调试指南:
- 处处print。想看谁就看谁,想哪儿看就哪儿看, 哪里不通,p(rint)哪里。
- 纯靠蒙、巧合式编程。哥是无敌幸运星,bug一向随意改改就搞定,嗯,也经常改到面目全非也没搞定。
- 从不备份。什么?难道你没听说过破釜沉舟. 刻舟求剑. 背水一战?给自己留退路的人,怎么能勇往直前!
- 程序无师自通。为什么要理解程序的目的、意图?看注释. 代码很晕的好吗?!
- 神来之笔。兵来将挡,水来土掩。大不了,哥用一堆if,也要跟你卯上了!脚痛医脚,头痛砍头,这么浅显的道理,难道你不懂吗?
亲爱的读者,你中了几条呢?
第5条解释
第5条的神来之笔何意? 我忘记英文原文了,反正不好直译。
举例,你写了个求平方根的函数,输入4应返回2,结果却返回了1.2,甚至直接崩掉。调试了半天,仍未解决,一怒之下,在函数开头来了句“神来之笔”:
if x == 4 then return 2;
了解啥叫“神来之笔"了吗?
A. OK
B. 不OK
继续解释
上面这个例子过于极端,只是我也想不出来靠谱的例子。
神来之笔的实际含义就是 面向 症状 而不是 问题 来进行修复,只要症状解决. 不再出现(出错),也就不再管bug是否还在,即所谓治标不治本。希望大家能理解。
显然,上面的地府调试指南会让你调试时如坠地狱, 读者要引以为戒。 现在让我们速速到仙界一游(我喜欢仙界不喜欢天堂), 看看仙界调试指南是什么样的。
我会直接告诉你吗?
A. 会
B. 不会
怎么直接会教给你!
神仙的书可是天书, 岂是你说看就看的? 我们针对上面地府调试指南, 一条条地汲取教训, 总结仙界调试指南吧!
因为一些原因,我们倒过来。
- 神来之笔。兵来将挡,水来土掩。大不了,哥用一堆if,也要跟你卯上了!脚痛医脚,头痛砍头,这么浅显的道理,难道你不懂吗?
说过了, 这条是指 有些人调试只修复了表面的症状,而不是实际的问题
所以我们调试时,要解决,而不是。
意味着什么?
我们要面向 问题 调试, 意味着什么? 意味着要真正找到问题所在, 意味着你对程序代码有足够的认识。 针对第四条:
- 程序无师自通。为什么要理解程序的目的、意图?看注释. 代码很晕的好吗?!
我们就该。
有备无患
明确要修复程序里的问题, 理解了程序, 开始动手调试, 好不容易改了大半, 眼看胜利在望, 突然——发现你改错了,可你从不备份,退不回去了, 悲剧啊 !
- 从不备份。什么?难道你没听说过破釜沉舟. 刻舟求剑. 背水一战?给自己留退路的人,怎么能勇往直前!
所以,调试、编码过程中,要记得。
真正的问题
目标有了(修复问题)、 准备有了(先理解程序)、 工具有了(备份或版本控制), 但我们需要的是 方法 啊! 方法 啊!
谁不想能真正修复问题、bug呢?找不到啊! 谁不愿意先理解程序呢? 看不懂代码啊! 谁会拒绝用工具呢? 呃,这个纯粹是懒或没有拥抱变化,跟不上变化
归根结底, 真正难点还是以下两条所显示的调试的无奈
- 处处print。想看谁就看谁,想哪儿看就哪儿看, 哪里不通,p(rint)哪里。
- 纯靠蒙、巧合式编程。哥是无敌幸运星,bug一向随意改改就搞定,嗯,也经常改到面目全非也没搞定。
找不到bug, 没有头绪,就只能像个无头苍蝇一样乱飞了。
你说是也不是?
A. 是
B. 不是
不专业到专业
没有头绪就瞎试吗? NO,这就显得不专业了。专业人士一定会有自己一套流程,可以有条不紊、安步当车地处理问题。就好比做好计划和规划。
所以我们要掌握一种 系统方法, 不只能用于调试, 还能应用到方方面面, 成为一个了无生趣的人,开玩笑,成为一个办事有条不紊、胸有成竹的人。
仙界调试指南总结
根据地府调试指南, 我们反向推导出仙界调试指南有:
- 解决问题。解决bug,而不只是bug引起的症状。针对魔鬼法则5
- 理解程序。理解程序的意图,分析输入和期望输出。针对魔鬼法则4
- 版本控制. 备份。针对魔鬼法则3
- 使用系统的调试方法。针对魔鬼法则1和2
所以,作为一个专业人士,在我们磨刀霍霍向bug时,要做到以下几点:
- 理解问题。理解程序出了什么问题。
- 理解程序目的。程序原本是打算做什么,结果应该是什么。
- 预测下如何解决问题,而不是症状。也就是提出个解决问题的可能方案。
第3点将是下一篇科学方法的前提。
好处
坚持使用仙界调试指南,好处大大地有,它是你变得职业的必经之路。不强迫自己养成良好的专业习惯,如何称得上专业人士?
王晶在《中国电影人物访谈》(是叫这个吧)里,从编剧的角度说过,什么叫专业。专业就是,在你刚刚失恋之后,让你写一个爱情喜剧,男女主角幸福生活在一起的剧本,也要高质量、不受情绪影响地写出来,这就叫专业。所以他说,靠直觉. 灵感的都不叫专业。虽然他现在拍的喜剧电影也是越来越不靠谱了。