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符号表

 

推荐一个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

你可能感兴趣的:(iOS高级进阶)