上个星期遇到了一个非常棘手的bug。我花了一个星期的时间,到昨天已经绝望,谁知柳暗花明醍醐灌顶,今天终于将其攻克,感觉有50%概率这会是我这辈子中印象最深的一次debug。
这次的bug有以下几个特点:
- 是第三方库的bug。所以必须要去看第三方库的源代码,搞清楚别人的代码是干什么的,然后自己hack,自己编译。
- 是一个Higgs-Bugson。只存在于日志中,通过生产环境复现。这一个特性有两个结果,都对debug十分不利:
- 枪毙了基于断点的debug方法,因为事先不知道bug会在什么时候发生。
- 第三方库的开发人员不可能有效参与debug过程。
- 最最重要的是:debug情节曲折离奇;结局出人意料,又在情理之中。
- debug过程使我掌握了一个内存调度算法,收获了一些debug技巧,加深了对程序语言的特性的认识。