iOS崩溃日志,回溯不可用。

6

摘要

自从我们的应用程序发布了最新更新以来,许多用户开始抱怨应用程序无法启动。我们收到了两个不同用户的崩溃日志和控制台日志,以及一段关于崩溃的视频。

我们的应用程序并非在每台设备上都会崩溃,但是当它崩溃时,每次轻触图标后一秒钟内就会崩溃(视频显示了这一点,以及朋友的手机)。

崩溃日志非常奇怪,因为它不包含回溯,并且帧指针(R7)为0x00000000。我们没有太多更改此更新,而且我们所做的任何更改都不可能破坏堆栈。此外,重新安装应用程序可以解决此问题。这使我们相信错误不在我们的代码中,而是在二进制文件中,可能在某个地方被损坏。

详细信息

据一些用户称,自从最新更新以来,我们的应用程序在启动时会崩溃。我们无法重现此问题,但是从一个用户那里收到了崩溃日志。该日志来自用户的硬盘(〜/ Library / Logs / CrashReporter / MobileDevice /)。我从经历同样问题的朋友的手机上也看到了相同的情况。

似乎在我们的应用程序接收iOS控制后,此崩溃就会发生(请参见更新)。但是,崩溃日志不包含回溯,并且指出未知线程发生了错误。我尝试符号化日志,但显然没有什么可供符号化的东西。

这似乎是某种空指针错误,但为什么没有回溯呢?什么可能导致此类错误,我该如何重现/解决它?

Incident Identifier: 984C8208-F4B4-4325-90B3-C9BE371E1A12
CrashReporter Key:   c512972e5cd00e75d8d7a6ddb59ff9a08946fd7b
Hardware Model:      iPad3,3
Process:         MyApp [3224]
Path:            /var/mobile/Applications/A0AEAA1D-7E5D-4BDC-8C9F-EA5FF4595059/MyApp.app/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2012-10-18 09:27:06.158 +0200
OS Version:      iOS 6.0 (10A403)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Highlighted Thread:  0

Backtrace not available

Unknown thread crashed with ARM Thread State (32-bit):
    r0: 0x000e64e0    r1: 0x7f8940c0      r2: 0x00000000      r3: 0x3c56cb88
    r4: 0x2fd1bd34    r5: 0x00000000      r6: 0x00000000      r7: 0x00000000
    r8: 0x2fd1bd3c    r9: 0x3c5688a8     r10: 0x00000000     r11: 0x00000000
    ip: 0x80000028    sp: 0x2fd1bd40      lr: 0x2fe9a8d7      pc: 0x000e64e0
  cpsr: 0x60000010

Binary Images:
   0xe5000 -   0x170fff +MyApp armv7  <15fd2c3131d03790bcd321411a241390> /var/mobile/Applications/A0AEAA1D-7E5D-4BDC-8C9F-EA5FF4595059/MyApp.app/MyApp
0x2fe96000 - 0x2feb6fff  dyld armv7  <75594988728831d98e1f7c4c7b7ca29d> /usr/lib/dyld
[...]

更新

同一用户发给我的视频显示,该应用程序在介绍动画开始之前甚至就崩溃了。因此,在应用程序实际运行之前(或者说是我们的应用程序运行的第一行代码之一)。

在ARMv6/7架构中,R7寄存器保存帧指针。它应该指向先前的堆栈帧,但在我们的情况下为0x00000000。实际上,许多寄存器都为空。可能是什么原因导致这种情况?

此外,崩溃非常一致;每次点击图标后不到一秒钟就会崩溃。至少对于这个特定的用户是如此。我们收到了更多但不太具体的报告,称应用程序“无法启动”。重新安装应用程序可以解决用户遇到的任何问题。

控制台日志也没有显示太多信息,只有这些:

这开始听起来非常像是通过App Store更新时损坏了二进制文件,但仅在更新时才会出现:

http://www.pcworld.com/article/258827/updated_apps_crashing_heres_what_you_need_to_know.html

http://www.marco.org/2012/07/04/app-store-corrupt-binaries

我已向苹果的技术服务发送了请求以帮助解决此问题。我会在这里报告回复。

苹果技术服务更新

我已经发布了一个错误报告,他们要求提供崩溃时间的控制台日志。我已经提供了一个,但据我了解它没有太多用处。除了:

2012-10-23 09:14:18 +0000 backboardd Application 'UIKitApplication:com.company.myapp[0xdd31]' exited abnormally with signal 11: Segmentation fault: 11

技术部门对此问题也不知道该怎么办,但建议我们不要上传没有任何代码更改的新二进制文件。无法测试问题是否消失(真是麻烦),如果不起作用,会让用户更加失望。

仍在等待我的错误报告的答案...


1
我假设你已经查看了这个问题的答案:https://dev59.com/L07Sa4cB1Zd3GeqP8f1O - 特别是那个谈论缓冲区溢出的答案。你是如何编写你的引导动画的? - deanWombourne
1
也许这个答案会有帮助:https://dev59.com/e1nUa4cB1Zd3GeqPXyUi - Tim Reddy
我认为我遇到了一个类似的问题,这个问题是在10月21日发布的更新中出现的。你有关于这个问题的任何更新吗? - ceperry
@ceperry 我们大约在同一时间发布。苹果还没有解决方案,他们(希望)仍在调查这个漏洞... 所以在那之前我们无能为力。 - Jeroen Bouma
我得到了更多的信息。今天,我的很多(大多数?全部?)更新并遇到崩溃问题的用户被应用商店提示再次更新到同一个版本。换句话说,3.0.7版本是他们下载并引起问题的更新版本,而应用商店提示他们再次更新到3.0.7版本。更新后,这些用户的问题消失了。我可能唯一做过的事情就是之前将我的应用下架了。昨天,我把它重新上架到了应用商店。 - ceperry
显示剩余7条评论
1个回答

3
在联系了苹果技术支持之后,我们被要求提交一个描述此问题的漏洞报告。我们已经上传了崩溃报告、控制台日志、此版本的Xcode存档以及来自iTunes的此版本IPA文件(App Store文件)。
大约等待了一周后,我们今天收到了来自技术支持的以下电子邮件:
你好,
我想让你知道,已经修复了导致客户在安装应用程序更新后崩溃的问题。
安装更新后仍然遇到崩溃的客户可以通过在应用商店再次更新应用程序来解决问题。这将安装已修复的应用程序版本。
应用程序的更新应该会出现在应用商店中。更新将重新安装应用程序的当前版本,并修复与错误安装相关的任何崩溃。应用程序的所有已保存数据都不会受到更新的影响。
如果您没有看到应用程序的更新,或在安装更新后仍然遇到崩溃,请告诉我。
如果您对应用程序由于此问题而收到的任何评论有疑虑,请直接联系商店团队http://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wa/jumpTo?page=contactUs&contactfaq=customerreviewremovalrequest并引用票号[我的票号]。
我们联系了一个安装了崩溃版本应用的朋友。他确认下载了更新,并解决了问题。迄今为止,苹果创建的更新并未在iTunes Connect中显示,但显然它是有效的。
我对苹果提供的服务感到满意。我想有时候会出错,即使是苹果神也会犯错。太遗憾了,我们的用户并不总是那么宽容(虽然大多数是)。似乎苹果甚至没有经过我们同意就删除了所有1星评价。由于飓风桑迪,我们目前无法检查,因为AppFigures已经关闭了...

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