【问题标题】:How to interpret iOS crash log from Crashlytics?如何从 Crashlytics 解释 iOS 崩溃日志?
【发布时间】:2019-01-27 06:35:13
【问题描述】:

我从 Crashlytics 获得了崩溃日志,请参见下文。我不知道+ 56line 3 中是什么意思。我不确定它是否与源代码中的行号有关。

Crashed: com.apple.main-thread
0  libobjc.A.dylib                0x1826f0910 objc_msgSend + 16
1  CoreFoundation                 0x183406360 -[NSDate timeIntervalSinceDate:] + 56
2  BLESupport                     0x10084a63c -[CustomPeripheral getDeviceParamsDidFinish:dictionary:paramType:error:] + 380
3  BLESupport                     0x100850ab4 -[CustomPeripheral peripheral:didUpdateValueForCharacteristic:error:] + 4032

【问题讨论】:

    标签: ios crashlytics google-fabric


    【解决方案1】:

    “+56”是编译后的二进制文件中的偏移量,而不是源代码中的行号。

    1  CoreFoundation                 0x183406360 -[NSDate timeIntervalSinceDate:] + 56
    

    Xcode 为您提供回溯日志,并提供有关活动帧的信息以帮助您跟踪问题。

    上面的崩溃日志可以这样理解。

    1 - 是它崩溃的帧。 0 是最高的

    CoreFoundation - 它是崩溃背后的负责框架。

    0x183406360 - 磁盘上 timeIntervalSinceDate 函数存在的地址。

    [NSDate timeIntervalSinceDate:] + 56 - 这是重要的部分,它说明了函数,+ 56 是从崩溃的函数地址的偏移量。

    感谢马特指出。

    编辑: 基本上,有三种类型的崩溃报告

    1. unsymbolicated - 仅包含地址和偏移量

    2. 部分符号化 - 这显示方法的基地址 + 方法名称 + 从基地址的偏移量

    3. 完全符号化。 - 这显示基地址 + 方法名称 + 文件名:行号

    希望对你有帮助。

    【讨论】:

    • 只是想指出+ 56 是函数地址的偏移量。它不是行号。
    • 感谢@Matt 指出,我已根据您的解释编辑了我的答案。
    【解决方案2】:

    使用的约定是:

    <address> <name of symbol> <offset into symbol> <line number>
    

    因此,对于上面的第 3 行,+ 56 表示 PC 是函数 -[NSDate timeIntervalSinceDate:] 的 56 个字节。这不是行号。

    为了让 Crashlytics 或任何其他服务提供行号信息,它们需要访问调试符号信息。此信息的一个非常常见的来源是 dSYM。因此,为了提供此 NSDate 函数的行号信息,您需要 CoreFoundation 的 dSYM。只有苹果有这个。当然,因为你没有这个函数的代码,所以有行号可能不会有太大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多