我只在一个崩溃日志中发现了这个问题,而且我无法理解为什么会这样。基本上,我已经对客户的崩溃日志进行了符号化,并且它都正确地检出并符号化,除了一个框架,它仍然是非符号化的。下面是一个片段(第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的其他帧/符号被象征化的事实让我更加困惑!
更新:我应该澄清一下,似乎可以很容易地推断出丢失的帧,但此时有多个不同类的调用,可能都会抛出{{ 1}}错误。因此,这个缺失的框架使调试变得更加困难。
答案 0 :(得分:2)
这可能是被调用的第三方代码吗?某些第三方静态库不包含符号。
另一种可能性是,此代码通过使用Xcode子项目生成的静态库进行集成。此项目设置为从静态库中删除符号。
这两种情况都会导致这些调用的崩溃报告中没有符号出现。