调试九法之 检查插头

昨天遇到一个bug,通过检查日志初步推断是condition A造成的,gcore 之后,通过检查core文件,发现“确实”是condition A照成的。

于是就各种查是什么原因导致了  condition A。

然而,一个小时过去了,并没有发现代码中的任何分支会照成condition A。TCP机制也不太可能造成 condition A。

于是,再次回头检查了一下core文件,发现 condition A并不存在,最后仔细检查 core文件,发现是另外一种 condition B造成了这个bug。

接下来,仔细分析condition B发生的原因,最终找到了bug发生的根本原因。

两次检查core文件,诊断结果不同,是因为我对系统不够了解,不了解 redis aeEventLoop实现的底层细节,就根据自己的理解擅意 condition A是存在的。

这次调试有两点经验:

1.了解系统,不了解的地方不要擅意猜想。

2. 随时检查插头。我们的猜想一般是建立在某些假设的前提上的,当发现自己的猜想不正确的时候,可以检一下这些前提是否存在。

猜你喜欢

转载自blog.csdn.net/sunweiliang/article/details/81214150