iOS线上APP崩溃(Crash)分析

    这两周一直在研究如何追踪线上的bug,如何快速分析出程序到底崩溃在什么地方,从底层了解Crash是如何产生的、如何传递的、以及是如何分析出来的。虽然项目组并没有对这些要求很严格,但是作为一个高级开发人员这些是我们必须要了解的,要弄明白的。之前项目中用的是Bugly,其实接入Bugly之后,大部分问题不需要我们自己去研究了,对于追踪闪退等问题Bugly都帮我们做了。

  1、iOS中Crash的产生和捕获

      捕获闪退和异常主要就是捕获系统产生的Mach异常Unix信号。之后就是根据捕获到的异常信息去做分析的。详细的可以参考我博客中另一篇文章:iOS中Mach异常和signal信号介绍,以及当APP崩溃时做线程保活弹出程序异常提示框

  2、如何获取Crash具体信息和Crash文件

      (1)、自己捕获Crash信息,上传到自己服务器或者直接发送到邮箱里。

            (实现方法:1、利用系统提供的NSSetUncaughtExceptionHandler方法直接捕获异常信息。但是这个方法捕获的异常有限,不能捕获例如由于内存访问错误等产生的signal。2、自己写一个处理异常的类,监听想要监听的signal信号,具体实现可以参考:iOS中Mach异常和signal信号介绍,以及当APP崩溃时做线程保活弹出程序异常提示框)

      (2)、通过Xcode-Devices-View Device Logs,去查找文件。(参考:Xcode:iOS崩溃日志分析方法)

      (3)、通过Xcode-Organizer-Crashs,查找线上崩溃报告。(定位不全面、不是很靠谱、还需要用户开启共享隐私数据)

      (4)、接入Bugly等第三方统计工具。

  3、拿到Crash的具体信息,利用符号表去解析

      说一下dSYM,不管是自己还是Bugly去解析Crash都需要dSYM。因为dSYM里边存着符号表,符号表里边存的就是内存地 址、函数地址、偏移量等内容。我们分析Crash文件的时候,就是拿崩溃的内存地址,去符号表里边找到对应的方法。

有关dSYM的详细介绍可以看Bugly官方文档的总结:iOS符号表

 

这里说一下如何查看UUID:

1、查看dSYM文件的的UUID,命令行执行:xcrun dwarfdump --uuid xxx(xxx为dSYM的路径)

2、查看.crash文件的UUID,在crash日志中的Binary Images:中的第一行尖括号内。如:armv7 <8bdeaf1a0b233ac199728c2a0ebb4165>

 

推荐一个Github上根据dSYM定位崩溃的工具:https://github.com/answer-huang/dSYMTools

另外,推荐几篇总结的不错的博客,大家可以看看:

iOS开发技巧-崩溃分析

iOS崩溃crash大解析

手动解析CrashLog之——原理篇

手动解析CrashLog之-方法篇

iOS crash log 解析 symbol address = stack address - slide 运行时获取slide的api 利用dwarfdump从dsym文件中得到symbol

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值