• 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、模块起始地址、模块结束地址、指令集种类、安装路径等信息。
    这些信息都是在符号化堆栈用到的。后面我们讨论怎么用。


  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4348497.html
Copyright © 2020-2023  润新知