唉,上周没写文章,有点惭愧。
这篇就补算作上周的吧。(当然,这周还要再写一篇)
上周五快下班时客服反馈过来一个问题,大意是说有蛮多用户(一两百个)在升级到新版后,发现账本数据没了。一开始接到这个反馈,内心是震惊了好几下。因为数据丢失是比较严重的事故,处理起来也麻烦,何况是有一两百个用户同时遇到这种问题。
这里就碰到了第一层荆棘。用户发过来的反馈描述大部分都是“升级后数据没了”,然而事实上之所以看不到数据,是因为升级后账本被切换掉了,因此显示了其他账本的数据,若其他账本没有数据,那当然在首页上就看不到数据了。这里确切的 Bug 描述应该是“升级后账本被切换了”,但是客服转过来的反馈依然使用了用户的描述文案,这就很容易在一开始就带偏别人 Debug 程序的方向。好在一开始就详细询问了客服,才知道要处理的是什么问题。
那就开始调试这个问题了。为什么升级后账本会被切换呢?
每次账本被选中后,都会保存该账本的唯一标识到配置文件中,这样下次重开应用后,就能知道上次选中的是哪个账本。另外,账本列表的相关信息也会保存在另一个配置文件中。
这时很容易就想到可能有两个原因:
- 上次选中账本的信息在配置文件中出错了
- 账本列表的相关信息在配置文件中出错了
初步怀疑出错原因是并发问题。
于是看了下对应的写信息到配置文件中的过程,确认写方法是线程安全的。那还有进程不安全的可能性,也看了下 Application 的相关方法,确认只有主进程才会执行业务逻辑,也可以说是安全的。
第二层荆棘,相关代码看似都是没有问题的,该加的防护也加了。
没办法,只能求助客服,让客服询问用户更多的信息,好帮助排查定位问题。
遇到第三层荆棘了,有的用户问完客服就跑了、有的是零基础用户,连账本、账本切换的概念都不知道。这样就很难从用户处获得精准的信息,噪音很多。
严重的上下文信息不充足,只能先在可疑的地方打上监控日志,待查看是否有不正常数据出现。
来无影,飘无踪,是我对这个 Bug 的印象。这个是目前为止遇到的最难处理的 Bug。查了两三天,还是一无所获。