我在 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 相机拍照时收到 iphone 中的内存警告问题