我只在一个崩溃日志中注意到了这个问题,我无法完全理解为什么会发生这种情况。基本上,我已经对来自客户的崩溃日志进行了符号化,并且所有的检查和符号化都正确,除了一个 frame,它仍然是未符号化的。下面是一个片段(第 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 中的其他帧/符号被符号化的事实让我更加困惑!
更新:我应该澄清一下,似乎可以很容易地推断出丢失的帧,但是此时对许多不同的类进行了多次调用,这都可能引发out_of_range
错误。因此,这个丢失的帧使调试变得更加困难。