调试九法之 检查插头

昨天遇到一个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. 随时检查插头。我们的猜想一般是建立在某些假设的前提上的,当发现自己的猜想不正确的时候,可以检一下这些前提是否存在。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值