【问题标题】:iOS crash log, backtrace not availableiOS 崩溃日志,回溯不可用
【发布时间】:2012-10-18 14:56:02
【问题描述】:

总结

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

我们的应用不会在每台设备上崩溃,但当它崩溃时,它会在点击图标后的一秒内每次崩溃(视频显示了这一点以及朋友的电话)。

崩溃日志很奇怪,因为它不包含回溯并且帧指针(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

我已向 Apple 的技术服务部门发送了一个请求以帮助解决此问题。我会在这里报告。

Apple 技术服务更新

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

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

技术部门也不知道如何解决这个问题,但建议我们不要在没有任何代码更改的情况下上传新的二进制文件。没有办法测试问题是否会消失 (wtf),如果它不起作用,它会让用户更加不安。

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

【问题讨论】:

  • 不确定为什么您没有看到回溯,但您肯定有某种形式的内存问题。你使用 ARC 吗?
  • @madmik3 我没有使用 ARC。我认为访问已释放的对象不会导致零指针 0x00000000 。我检查了为此版本更改并在启动时执行的代码位,它们都不会导致空指针。如果你愿意,我可以发布它。
  • 我假设您已经看过这个问题的答案:stackoverflow.com/questions/3222142/… - 特别是关于缓冲区溢出的问题。您是如何编写介绍动画的?
  • 也许这个答案会有所帮助:stackoverflow.com/questions/6662176/…
  • @deanWombourne 我确实看到了这个问题,但到目前为止可能还没有给予足够的重视。我发现 R7 被用作帧指针来跟踪前一个堆栈帧。 R7 的值为 0x00000000,这将是一个问题。缓冲区溢出确实似乎是一个合乎逻辑的原因。我好久没改过介绍了。它使用非常简单的核心动画函数来动画 UIImageView 的透明度。我将在我的问题中添加我怀疑的另一段代码。

标签: ios crash


【解决方案1】:

联系 Apple 技术支持后,我们被要求提交一份描述此问题的错误报告。我们已经上传了这个版本的崩溃报告、控制台日志、来自 Xcode 的存档和来自 iTunes 的这个版本的 IPA 文件(App Store 文件)。

在等待了大约一周后,我们今天收到了技术支持的以下电子邮件:

你好,

我想让您知道,我们已经针对之前的问题进行了修复 导致为您的应用安装更新的客户崩溃。

安装更新后遇到崩溃的客户可以 通过在 App Store 中再次更新应用程序来解决问题。这会 安装应用的固定版本。

您的应用的更新应该会出现在 App Store 中。更新遗嘱 重新安装当前版本的应用程序,并修复任何相关的崩溃 安装不良。所有应用程序保存的数据将不受 更新。

如果您没有看到您的应用的更新,请告诉我,或者 安装更新后仍然会出现崩溃。

如果您对您的应用收到的任何评论存有疑虑 关于这个问题,请直接联系店家团队 http://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wa/jumpTo?page=contactUs&contactfaq=customerreviewremovalrequest 和参考票号[我的号码]。

我们与安装了该应用程序崩溃版本的朋友进行了核实。他确认他下载了更新,这解决了问题。到目前为止,Apple 创建的更新没有显示在 iTunes Connect 中,但它显然有效。

我对 Apple 提供的服务感到满意。我猜事情偶尔会出错,即使是苹果之神也会出错。太糟糕了,我们的用户并不总是那么宽容(尽管大多数是)。似乎苹果甚至在没有询问的情况下为我们删除了所有 1 星评论。我们目前无法检查它,因为 AppFigures 目前因桑迪飓风而停机......

【讨论】:

    猜你喜欢
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2017-10-07
    • 2012-06-28
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多