debug方法论

发布时间 2023-12-02 11:18:35作者: 半山随笔

想来今年有几次印象比较深的debug经历。每次的debug时间差不多在一周,每次也都学到一些新的调式手段。总结以下debug的经验。

第一点:debug最重要的逻辑要严密,要基于一个确定的事实用控制变量法去测试猜想。对于不确定的事实不要当成既定事实,这是debug的大忌。错误往往隐藏在下意识中。要尽量做到已知的都是经过验证的。

第二点:减少变量,尽量用最简单,最熟悉的方式去复现bug。变量太多会导致问题变得复杂,简化问题才能接近真相。

第三点:重视log。错误日志是发现问题最重要的信息,要尽量获取完整连续的log,比如使用journalctl -f可以获取连续的log,避免遗漏。对于重要的log,要完整解析,避免错过重要的信息。

第四点:善用好的工具。对与跟系统相关的bug,bpftrace,objdump,gdb等都是很好的工具,当然我觉得最好用的工具还是print,没有之一。先用print,了解大概的方向,再用那些高级的玩意去深挖。

第五点:了解软件栈。要对研究的对象工作在哪一层有清晰的认识,了解各层软件之间的交互,这对于了解事情是怎么发生的非常重要。

暂时就想到这些。