崩溃日志缺少一个符号帧
Posted
技术标签:
【中文标题】崩溃日志缺少一个符号帧【英文标题】:Crash log is missing one symbolicated frame 【发布时间】:2013-02-26 11:59:17 【问题描述】:我只在一个崩溃日志中注意到了这个问题,我无法完全理解为什么会发生这种情况。基本上,我已经对来自客户的崩溃日志进行了符号化,所有这些都检查出来并正确地符号化,除了一帧,它仍然是未符号化的。下面是一个 sn-p(第 9 帧是问题):
6 libc++abi.dylib 0x00001114 std::terminate() + 20
7 libc++abi.dylib 0x00002513 __cxa_throw + 123
8 libstdc++.6.dylib 0x00005ba9 std::__throw_out_of_range(char const*) + 153
9 MyApp 0x002ff343 0x0000c000 + 3093315
10 MyApp 0x002ec02b -[ChildViewController tableView:cellForRowAtIndexPath:] (ChildViewController.mm:42)
11 MyApp 0x0042d725 -[ViewControllerRoot tableView:cellForRowAtIndexPath:] (ViewControllerRoot.m:198)
12 UIKit 0x0004e54d -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 413
我尝试了各种方法来符号化这条线,但无济于事。我已经手动运行了 atos 以及 symbolicatecrash.pl (详细了解发生了什么)。 dSYM 和 .app 文件很好,并且与崩溃日志的二进制图像部分中的应用程序的 UUID 匹配。我使用的是最新的稳定版 Xcode,4.6。其他团队成员也尝试过,结果相同。
这里有什么问题吗,或者这是 Objective-C 的动态特性的问题?我相信是前者,但 MyApp 中的其他框架/符号被符号化的事实让我更加困惑!
更新:我应该澄清一下,似乎可以很容易地推断出丢失的帧,但是此时对许多不同的类进行了多次调用,这都可能引发@987654322 @ 错误。因此,这个缺失的帧使调试变得更加困难。
【问题讨论】:
【参考方案1】:这可能是被调用的第 3 方代码吗?一些第 3 方静态库不包含符号。
另一种可能性是,此代码是通过使用 Xcode 子项目生成的静态库集成的。并且这个项目被设置为从静态库中去除符号。
这两种方法都将导致这些调用的崩溃报告中不会出现任何符号。
【讨论】:
很遗憾,堆栈的这个框架内没有使用任何静态库。 使用 atos 手动进行符号化时,您是否按照此处发布的规则将正确的地址传递给 atos? ***.com/questions/13574933/… 是的,我从atos -arch armv7 -o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp 0x002F4343
得到的输出是0x002f4343 (in MyApp)
。没有符号信息...
如果不排除项目本身和 dSYM 以及其他情况,我怀疑是否有可能找出符号中缺少此框架的原因。以上是关于崩溃日志缺少一个符号帧的主要内容,如果未能解决你的问题,请参考以下文章