iPhone 崩溃日志无法将 UIKit 调用符号化

3
有没有人见过这样的崩溃日志,其中UIKit和其他系统库没有被符号化?我们的一个应用程序在启动时出现崩溃问题,但只有少数用户(大约5个)遇到了这个问题。(据我所知,会显示默认的.png然后崩溃),而我们无法重现它。代码中似乎没有什么明显的问题,我已经运行了静态分析器并且没有发现任何问题。但是对我来说奇怪的是UIKit和其他库没有被符号化。我查阅了关于libSystem.B.dylib 0000000000 0 + 0的信息,并在谷歌上找到了一些相关内容,与静态库有关。该项目确实使用了静态库,但我认为如果存在问题,它将不会在任何设备上工作,而不仅仅是几个设备。
Exception Type:  EXC_BAD_ACCESS (SIGBUS)  
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000  
Crashed Thread:  0  

Thread 0 Crashed:  
0  libSystem.B.dylib              0000000000 0 + 0  
1  UIKit                          0x0068a0dc 0x66c000 + 123100  
2  MyApp                         0x000307b2 -[RootViewController defaultImage]       (RootViewController.m:39)  
3  MyApp                         0x00030720 -[RootViewController loadView] (RootViewController.m:49)  
4  MyApp                         0x00030182 -[RootViewController loadView] (RootViewController.m:43)  
5  MyApp                         0x00031894 -[AppDelegate applicationDidFinishLaunching:] (AppDelegate.m:52)  
6  UIKit                          0x31ada4b8 0x31acc000 + 58552  
7  UIKit                          0x31ad09e2 0x31acc000 + 18914  
8  UIKit                          0x31b29fd8 0x31acc000 + 384984  
9  UIKit                          0x31b298fc 0x31acc000 + 383228  
10 UIKit                          0x31b29332 0x31acc000 + 381746  
11 GraphicsServices               0x3026c046 0x30267000 + 20550  

这是defaultImage方法的全部内容。
-(UIImage*)defaultImage
{
  return [UIImage imageNamed: @"Default.png"];
}

我们从其中一位用户那里获得了ipa文件,Default.png看起来并没有损坏。
2个回答

2

Xcode现在不再包含所有iOS每个版本和每个硬件的全部内容。相反,它会从设备上提取信息。

找出这些用户正在使用哪个操作系统和设备(很可能是相同的),并将其连接到您的Mac上。 Xcode将从中提取所需的信息。


不幸的是,它来自客户设备,但你说得对,这可能会解决符号化问题。我们已经找到了错误,永远不要使用类别覆盖类中的方法。 - jjburka
同样的问题,但是在应用程序中没有添加覆盖方法(它们是带前缀的)(也许在第三方库中...)。有没有办法检测添加中的重写方法? - ıɾuǝʞ
一般情况与加法无关,只是缺少调试符号。 - Steven Fisher

0

我可以确认,有时我的应用程序的崩溃日志也会出现这种情况。到目前为止,我还没有能够进一步解析它们。似乎没有理由为什么有些符号完全,而其他符号则不完全。

您是否对提交到App Store的版本进行了归档和构建?出于某种原因,XCode似乎更擅长从已归档的应用程序构建中解析日志,因此我始终确保这样做。


关于崩溃本身,您是否可能正在从后台线程显示启动画面?这不会导致所有设备崩溃,但在某些设备上会发生(我没有找到它为什么会崩溃某些设备而不是其他设备的原因)。我的应用程序受到了影响,因为它没有使模拟器或任何我的设备崩溃,但它确实使一小部分用户的设备崩溃。我正在使用后台线程进行初始化,并且后来才读到只能从主线程使用UIKit。我进行了更改,问题就解决了。

提交的构建已归档。但很高兴知道之前有人遇到过这个问题。 - jjburka
关于你的另一个问题,我只在主线程上操作UI。 - jjburka
@Justin,是的,我应该注意到那个问题。 - Ben Baron
只是想知道,那个崩溃日志里还有别的线程吗?我今天刚处理了一个崩溃日志,它说线程0崩溃了,但实际上是线程9 (在线程9中发生了objc_exception_throw,而在线程0中没有任何信息),所以它似乎并不总是指向日志顶部的正确线程号。如果这就是整个日志,那么没有看到代码的情况下,恐怕我已经没有更多的想法了。 - Ben Baron

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