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

4
我从Crashlytics收到了一份崩溃日志,如下所示。我不知道第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
2个回答

3
"

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

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

Xcode提供了回溯日志并提供有关活动帧的信息,以帮助您跟踪问题。
上述崩溃日志可以如下理解。
1- 它是崩溃时的帧。0是最顶部
CoreFoundation - 这是导致崩溃的框架。
0x183406360 - 磁盘上存在timeIntervalSinceDate函数的地址。
[NSDate timeIntervalSinceDate:] + 56 - 这是重要部分,它说明了函数和+ 56是距离崩溃功能地址的偏移量。
感谢Matt指出这一点。
编辑: 基本上,有三种类型的崩溃报告
未符号化 - 这只包含地址和偏移量
部分符号化 - 这显示方法的基地址+方法名称+从基地址的偏移量
完全符号化。 - 这显示基地址+方法名+文件名:行号
希望能有所帮助。

2
只是想指出+56是函数地址的偏移量,而不是行号。 - Mattie
感谢 @Matt 指出,我已根据您的解释编辑了我的答案。 - Bhavin Kansagara

1
惯例如下所示:

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

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

为了使Crashlytics或任何其他服务提供行号信息,它们需要访问调试符号信息。这些信息的非常普遍的来源是dSYM文件。因此,要为此NSDate函数提供行号信息,您需要CoreFoundation的dSYM文件。只有苹果公司拥有这个文件。当然,由于您没有此函数的代码,拥有行号可能也没有太大帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接