符号化没有崩溃日志的 iOS 崩溃堆栈跟踪

Posted

技术标签:

【中文标题】符号化没有崩溃日志的 iOS 崩溃堆栈跟踪【英文标题】:Symbolicate iOS Crash Stack Trace without Crash Log 【发布时间】:2013-03-07 09:58:04 【问题描述】:

我正在使用 BugSense 来跟踪 ios 应用程序的崩溃。最近我注意到在实时使用中表示堆栈跟踪的问题。

问题在于 Apple 在 iOS 4.3 中引入了地址空间随机化,因此感兴趣的堆栈地址不能单独用于检索导致崩溃的正确方法。

目前我正在尝试通过计算得到正确的地址

symbol address = slide + stack address - load address

我已经有了幻灯片和堆栈地址,但据我了解,加载地址只能在我无法通过 BugSense 获得的崩溃报告中找到。 堆栈跟踪看起来像

0 CoreFoundation 0x342723e7 + 162
1 libobjc.A.dylib 0x3bf63963 objc_exception_throw + 30
2 CoreFoundation 0x3427229d + 0
3 Foundation 0x34b48fa3 + 90
4 UIKit 0x360b5bd9 + 7640
5 MyApp 0x000c6e99 0xb3000 + 81561
6 UIKit 0x3623c2ff 0x3607e000 + 1827583
7 UIKit 0x361b8737 0x3607e000 + 1287991
8 UIKit 0x361a9869 0x3607e000 + 1226857
9 UIKit 0x361a97ad 0x3607e000 + 1226669
10 CoreFoundation 0x34247941 0x341b0000 + 620865
11 CoreFoundation 0x34245c39 0x341b0000 + 613433
12 CoreFoundation 0x34245f1d 0x341b0000 + 614173
13 CoreFoundation 0x341b923d CFRunLoopRunSpecific + 356
14 CoreFoundation 0x341b90c9 CFRunLoopRunInMode + 104
15 GraphicsServices 0x37d9733b GSEventRunModal + 74
16 UIKit 0x360d52b9 UIApplicationMain + 1120
17 MyApp 0x000b61bf 0xb3000 + 12735
18 MyApp 0x000b4a08 0xb3000 + 6664

有没有其他方法来表示这个地址或获取相应的加载地址?

【问题讨论】:

Symbolicating iPhone App Crash Reports的可能重复 @Benoit 我认为问题在于,sven.b 没有足够的声誉来评论您刚刚发布的答案。 sven.b 认为该线程中的给定答案不再有效,因为 iOS 4.3 添加了空间随机化。 谢谢Benoit,你提到的帖子有点过时了。 atos 命令是正确的,但符号地址不能再如上所述从堆栈跟踪中获取。 那个论点不正确。崩溃日志具有用于应用程序二进制文件的 ASLR 偏移量以及所有链接库的偏移量。 atos 能够符号化崩溃日志 > 4.3 没有问题。 您应该要求 Bugsense 为您提供完整的标准格式崩溃报告,以便您获得所需的所有数据。 load address 显示在二进制图像部分。如果他们不能,您可能需要考虑另一种做得更好的服务。旁注:建议重复接受的答案确实是错误的,请参阅我的评论:***.com/questions/1460892/… 【参考方案1】:

load address0xb3000

幸运的是,您已经从应用程序二进制文件中删除了符号,否则这将不可见。

此外,由于抛出异常而发生此崩溃,因此崩溃报告应为您提供Last Exception Backtrace,显示实际异常发生的位置和实际异常原因。发布的堆栈跟踪的第 5 行中的调用很可能不会为您提供很多关于此的信息。您获得的崩溃信息看起来非常有限:(

【讨论】:

以上是关于符号化没有崩溃日志的 iOS 崩溃堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章

iOS应用崩溃日志分析

xcode 6.1中的崩溃日志符号化IOS 8.1.2?

iOS测试常见崩溃

iOS 查看崩溃日志与符号化

iOS奔溃分析技巧-crash日志符号化

iOS奔溃分析技巧-crash日志符号化