我在 iPhone 应用程序中收到错误 0x8badf00d,这不是通常的嫌疑人

Posted

技术标签:

【中文标题】我在 iPhone 应用程序中收到错误 0x8badf00d,这不是通常的嫌疑人【英文标题】:I get error 0x8badf00d in iPhone app, and is not the usual suspect 【发布时间】:2010-11-19 22:18:32 【问题描述】:

我的应用在启动时随机崩溃。

我很确定不是启动时间(如What does 8badf00d mean? 中所述),因为应用启动速度很快。

最糟糕的是崩溃日志无法模拟(我无法获得源代码行号)。这是错误:

Exception Type:  00000020
Exception Codes: 0x8badf00d
Highlighted Thread:  0

Application Specific Information:
Failed to launch
Thread 0:
0   JhonSell                        0x000c63d6 0x1000 + 807894
1   JhonSell                        0x000c7ffe 0x1000 + 815102
2   JhonSell                        0x000c9646 0x1000 + 820806
3   JhonSell                        0x000ca50a 0x1000 + 824586
4   JhonSell                        0x000b3b72 0x1000 + 732018
5   JhonSell                        0x000b3e1e 0x1000 + 732702
6   JhonSell                        0x000b3fd4 0x1000 + 733140
7   JhonSell                        0x0000a312 0x1000 + 37650
8   JhonSell                        0x0000aa7c 0x1000 + 39548
9   JhonSell                        0x00006e7c 0x1000 + 24188
10  JhonSell                        0x0000fede 0x1000 + 61150
11  JhonSell                        0x00004080 0x1000 + 12416
12  UIKit                           0x30a4ef24 -[UIApplication performInitializationWithURL:asPanel:] + 160
13  UIKit                           0x30a57dec -[UIApplication _runWithURL:] + 644
14  Foundation                      0x306945a2 __NSFireDelayedPerform + 326
15  CoreFoundation                  0x30269d88 CFRunLoopRunSpecific + 2642
16  CoreFoundation                  0x30269320 CFRunLoopRunInMode + 44
17  GraphicsServices                0x31567e58 GSEventRunModal + 268
18  UIKit                           0x30a4fa6c -[UIApplication _run] + 520
19  UIKit                           0x30a591d0 UIApplicationMain + 1132
20  JhonSell                        0x00002290 0x1000 + 4752
21  JhonSell                        0x0000202c 0x1000 + 4140

我无法调试它(我尝试附加但应用程序被看门狗杀死,我想)。

【问题讨论】:

【参考方案1】:

在您的 UIApplicationDelegate 实现中有三种方法必须在 5-6 秒内完成,否则 iPhone 会终止您的应用程序(这不适用于连接调试器和在模拟器上的情况)。我不确定是否在任何地方记录了确切的时间间隔,但这就是我通过实验确定的。启动时有两个,applicationDidFinishLaunching: 和 application:didFinishLaunchingWithOptions,关闭时有一个 applicationWillTerminate。

您需要检查这些方法中的任何网络访问或耗时操作是否异步执行,以便该方法可以快速返回。

这是我所知道的唯一会导致启动时看门狗崩溃的事情。

关于堆栈跟踪的更多提示,如果您使用的是 OS 3.0 和 3.0 SDK,Organizer 应该在此之前执行此操作。只需确保您将来自-exact-build 的dSYM 文件保存在硬盘上,以便在某处突出显示。然后当你在 XCode 中查看 Organizer 下的@trace 时,它​​应该会自动为你添加符号。

【讨论】:

【参考方案2】:

8BADF00D Apple 用作 iPhone 崩溃报告中的异常代码 当申请时间过长时 启动或终止。

另见

DEADFA11当用户强制退出应用程序时,Apple 将其用作 iPhone 崩溃报告中的异常代码

【讨论】:

【参考方案3】:

Apple 的 iPhone crash reporting 文档表明,此错误代码表示看门狗超时:

看门狗超时:以异常代码 0x8badf00d 区分,当应用程序启动或终止时间过长时会发生超时。

崩溃报告也说明了同样的事情;这似乎很可能就是正在发生的事情。也许不是应用程序启动;但是正在终止 - iPhone 操作系统希望能够非常快速地终止应用程序(例如,在收到来电时退回到操作系统) - 也许您的应用程序需要很长时间才能关闭?

关于您在回溯中缺少符号 - 您是否查看过 Symbolicate 实用程序?

【讨论】:

【参考方案4】:

您可以查看此 Apple 技术说明的底部以了解 Apple 的解释: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html

另外,截图在这里: http://cl.ly/19391r1x213u0U440t17

【讨论】:

【参考方案5】:

在我看来你“吃了不好的食物”(明白吗?8 bad f00d?)

无论如何,据我了解,这意味着您在应用程序中使用了一个未初始化的指针,从它在初始化时的外观来看。

(或者无论如何,评论中的人似乎是这样说的here)

【讨论】:

这不是在这种情况下发生的事情。 developer.apple.com/iphone/library/technotes/tn2008/tn2151.html

以上是关于我在 iPhone 应用程序中收到错误 0x8badf00d,这不是通常的嫌疑人的主要内容,如果未能解决你的问题,请参考以下文章

iPhone上的SQLite,奇怪的链接错误

从 iphone 相机拍照时收到 iphone 中的内存警告问题

iPhone SDK 代码签名错误

iOS 10 iPhone 7 键盘在收到通知时消失

Iphone 6 plus Simulator 工作正常,设备除外

iPhone上的“不受信任的服务器证书”