iOS线上版本崩溃调试

背景介绍:
客服接到部分用户反映,好医网患者端在点击浏览“用户订单”功能时,程序发生闪退现象,且用户重新安装程序并更新程序和iOS系统至最新版本后,问题依旧没有解决。
现状:从用户的角度来看,在好医网患者端APP上发生交互,产生订单的用户,应该作为我们的真实有效用户,而解决当前线上崩溃的问题与否,直接关系到这部分真实用户的用户体验。按照线上统计分析,发生该问题的用户数量是2.79% 小计246次。
这里写图片描述
难点:在公司的开发环境中,无法重现上述问题,因此研发人员无法直接对代码进行调试,不能直接定位问题发生的原因。
思路:从线上崩溃日志中,找到闪退现象发生时,程序最后崩溃时刻的调用堆栈,尝试定位到崩溃发生的代码位置,然后回溯其发生过程,找到引起崩溃的原因。

于3.0.6版本上线后,线上版本能够正确跟踪崩溃报告,以下为崩溃报告追踪问题分析过程记录。
这里写图片描述
问题定位:
Appstore线上运行版本: 3.0.6
这里写图片描述
该处代码使用NSDictionary,用字面量创建字典数据结构,发生崩溃,查明原因是由于给出的值存在空值,造成NSDictionary创建即发生崩溃现象。
这里写图片描述
分析流程:

  • 为毛存在空值
    • 空值可能发生在user_id和userStatus上,追溯这两个值的传递过程。
    • userStatus不可能发生空值,页面共计3个按钮,tag值传入userStatus分别为1,2,4
    • 那么,user_id存在空值可能性,在普通用户名密码登陆方式中,服务器hy_user_id字段不可能为空(客户端验证逻辑),所以该登陆方式的user_id也不可能存在空值;
    • 验证微信、QQ登陆方式的user_id是否有空值可能性,在微信和QQ的三方授权登陆过程中,服务器会对用户的hy_user_id进行验证,如果绑定的用户不存在hy_user_id这个值,无法绑定成功。
  • 如果确实可能发生空值存在的逻辑,则判断空值,避免NSDictionary创建发生崩溃
    • 在底层接口封装中的HYUserPreference类中,读取数据的方法中增加返回值是否为nil的判断,如果存在值为nil,则分配一个空的字符串对象,避免外层调用到nil,发生程序崩溃。

解决结果:
经过上述验证后,崩溃问题解决。

相关问题:
经后续对线上崩溃统计的持续跟踪发现,同样由于hy_user_id值为nil,导致用户在调用“健步走”功能模块时,也会发生程序崩溃的现象,经过本次bug修正之后,可以规避掉因为hy_user_id为空值,造成APP崩溃的现象。

展开阅读全文

没有更多推荐了,返回首页