zoukankan      html  css  js  c++  java
  • iOS Crash 分析(文二)-崩溃日志组成

    iOS Crash 分析(文二)-崩溃日志组成


    如今我们看一个淘宝iOS主客崩溃的样例:

    ### 1.进程信息 ###
    Incident Identifier: E4201F10-6F5F-40F9-B938-BB3DA8ED7D50
    CrashReporter Key:   TODO
    Hardware Model:      iPhone4,1
    Process:         Taobao4iPhone [3538]
    Path:            /var/mobile/Applications/E3B51E77-D44D-4B3E-8767-B7DC2008D138/Taobao4iPhone.app/Taobao4iPhone
    Identifier:      com.taobao.taobao4iphone
    Version:         4.8.1
    Code Type:       ARM
    Parent Process:  launchd [1]
    
    ### 2.基本信息 ###
    Date/Time:       2014-09-16 21:39:30 +0000
    OS Version:      iPhone OS 7.1.2 (11D257)
    Report Version:  104
    
    ### 3.异常信息 ###
    Exception Type:  SIGSEGV
    Exception Codes: SEGV_ACCERR at 0xa2400db3
    Crashed Thread:  0
    
    ### 4.线程回溯 ###
    Thread 0 name:  Dispatch queue: com.apple.main-thread
    
    ### 5.Crash调用堆栈 ###
    Thread 0 Crashed:
    0   libobjc.A.dylib                     0x3838760c 0x38375000 + 75276
    1   Taobao4iPhone                       0x012c03e1 0x66000 + 19244001
    2   Taobao4iPhone                       0x012c054f 0x66000 + 19244367
    3   Foundation                          0x2e4de163 0x2e419000 + 807267
    4   CoreFoundation                      0x2dac9167 0x2da2a000 + 651623
    5   CoreFoundation                      0x2dac8d7f 0x2da2a000 + 650623
    6   CoreFoundation                      0x2dac711b 0x2da2a000 + 643355
    7   CoreFoundation                      0x2da31ebf 0x2da2a000 + 32447
    8   CoreFoundation                      0x2da31ca3 0x2da2a000 + 31907
    9   GraphicsServices                    0x3298b663 0x32982000 + 38499
    10  UIKit                               0x3037e14d 0x30310000 + 450893
    11  Taobao4iPhone                       0x0006b349 0x66000 + 21321
    12  Taobao4iPhone                       0x0006a5e8 0x66000 + 17896
    
    Thread 1:
    0   libsystem_kernel.dylib              0x38928808 0x38928000 + 2056
    1   libdispatch.dylib                   0x38869e03 0x3885f000 + 44547
    
    ### 5.动态库信息 ###
    Binary Images:
       0xf4000 -  0x1a5bfff  +Taobao4iPhone                      armv7 <43ebe409980f31fd9be165a64b002af5>     /var/mobile/Applications/DF0B483E-238E-4F55-947A-AB27ED688DC8/Taobao4iPhone.app/Taobao4iPhone
    0x2c641000 - 0x2c645fff  AccessibilitySettingsLoader         armv7 <e006260ea20e3a1dacd330ac2026c15b>     /System/Library/AccessibilityBundles/AccessibilitySettingsLoader.bundle/AccessibilitySettingsLoader
    0x2c742000 - 0x2c82afff  RawCamera                           armv7 <8f62f266f7d539a5a388221dfe90db50>     /System/Library/CoreServices/RawCamera.bundle/RawCamera
    0x2c954000 - 0x2ca56fff  AVFoundation                        armv7 <e6f4e322434733c2a6d074bdc226b08d>     /System/Library/Frameworks/AVFoundation.framework/AVFoundation
    

    我解读一下这份崩溃日志:

    1.进程信息

    第一部分是闪退进程的相关信息。

    Incident Identifier

    是崩溃报告的唯一标识符。

    CrashReporter Key

    是与设备标识相相应的唯一键值。尽管它不是真正的设备标识符,但也是一个很实用的情报:假设你看到100个崩溃日志的CrashReporter Key值都是同样的,或者仅仅有少数几个不同的CrashReport值,说明这不是一个普遍的问题,仅仅发生在一个或少数几个设备上。

    Hardware Model

     标识设备类型。 假设非常多崩溃日志都是来自同样的设备类型,说明应用仅仅在某特定类型的设备上有问题。上面的日志里,崩溃日志产生的设备是iPhone 4s。

    Process

     是应用名称。中括号中面的数字是闪退时应用的进程ID。

    2.基本信息

    Version

    APP的版本

    OS Version

    iOS操作系统版本 iPhone OS 7.1.1 (11D201)
    7.1.1:系统版本号
    11D201:build号
    这里要所下面build号。每一个系统版本号号有可能会相应多个build号。如苹果公布的7.1.1会有几个版本号,如:电信版本号、联通版本号等。build号我们后面对日志符号化的时候会用到。

    3.异常信息

    在这部分,你能够看到闪退发生时抛出的异常类型。还能看到异常编码和抛出异常的线程。依据崩溃报告类型的不同,在这部分你还能看到一些另外的信息。

    Crashed Thread

    crash线程号。能够依据这个编号找到相应的crash调用堆栈,当前crash线程的编号为0,所以我们能够直接找到crash线程的堆栈信息:

    Thread 0 Crashed:
    0   libobjc.A.dylib                     0x3838760c 0x38375000 + 75276
    1   Taobao4iPhone                       0x012c03e1 0x66000 + 19244001
    2   Taobao4iPhone                       0x012c054f 0x66000 + 19244367
    3   Foundation                          0x2e4de163 0x2e419000 + 807267
    4   CoreFoundation                      0x2dac9167 0x2da2a000 + 651623
    5   CoreFoundation                      0x2dac8d7f 0x2da2a000 + 650623
    6   CoreFoundation                      0x2dac711b 0x2da2a000 + 643355
    7   CoreFoundation                      0x2da31ebf 0x2da2a000 + 32447
    8   CoreFoundation                      0x2da31ca3 0x2da2a000 + 31907
    9   GraphicsServices                    0x3298b663 0x32982000 + 38499
    10  UIKit                               0x3037e14d 0x30310000 + 450893
    11  Taobao4iPhone                       0x0006b349 0x66000 + 21321
    12  Taobao4iPhone                       0x0006a5e8 0x66000 + 17896
    

    4.线程回溯

    线程回溯
这部分提供应用中全部线程的回溯日志。 回溯是闪退发生时全部活动帧清单。它包括闪退发生时调用函数的清单。看以下这行日志:

    2      Taobao4iPhone        0x012c054f        0x66000   +   19244367
    

    这条调用栈包含以下四部分:
    1. 模块号:这里是2
    2. 二进制库名:这里是Taobao4iPhone
    3. 调用方法的地址:这里是0x012c054f
    4. 第四部分分为两列,基地址和偏移地址。此处基地址为0x66000,偏移地址为19244367。基地址指向crash的模块(也是模块的load地址)如UIKit。偏移地址指向crash代码的行数。怎样转换我们后面讨论。这些信息都保存在dsym文件里。

    5.Crash调用堆栈

    这一部分是我们分析crash最重要的信息。一般我们会把焦点放在crash线程的堆栈上。由于这样能够帮我最快的找到crash的原因。

    5.动态库信息

    这些信息包含动态库名称、UUID、模块起始地址、模块结束地址、指令集种类、安装路径等信息。
    这些信息都是在符号化堆栈用到的。后面我们讨论怎么用。


  • 相关阅读:
    项目经理所需要具备的素质
    项目经理的个人修养
    项目拖期怎么办
    创业起步的十大准备步骤
    注册(创办)公司的手续过程
    如何让女人每天更快乐
    全面比较:中美两国百姓的生活成本
    ADO.NET级别的事物
    respondsToSelector的使用
    用js在两个页面之间传值
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4348497.html
Copyright © 2011-2022 走看看