debug方法论
想来今年有几次印象比较深的debug经历。每次的debug时间差不多在一周,每次也都学到一些新的调式手段。总结以下debug的经验。
第一点:debug最重要的逻辑要严密,要基于一个确定的事实用控制变量法去测试猜想。对于不确定的事实不要当成既定事实,这是debug的大忌。错误往往隐藏在下意识中。要尽量做到已知的都是经过验证的。
第二点:减少变量,尽量用最简单,最熟悉的方式去复现bug。变量太多会导致问题变得复杂,简化问题才能接近真相。
第三点:重视log。错误日志是发现问题最重要的信息,要尽量获取完整连续的log,比如使用journalctl -f可以获取连续的log,避免遗漏。对于重要的log,要完整解析,避免错过重要的信息。
第四点:善用好的工具。对与跟系统相关的bug,bpftrace,objdump,gdb等都是很好的工具,当然我觉得最好用的工具还是print,没有之一。先用print,了解大概的方向,再用那些高级的玩意去深挖。
第五点:了解软件栈。要对研究的对象工作在哪一层有清晰的认识,了解各层软件之间的交互,这对于了解事情是怎么发生的非常重要。
暂时就想到这些。