繁体   English   中英

如何从 Crashlytics 解释 iOS 崩溃日志?

[英]How to interpret iOS crash log from Crashlytics?

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

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

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

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

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

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

1 -那是它崩溃的框架。 0 是最高的

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

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

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

感谢马特指出。

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

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

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

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

希望能帮助到你。

使用的约定是:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM