8badf00d是什么意思?

时间:2009-04-21 16:20:13

标签: iphone crash

有时候我的iPhone应用程序崩溃了一个奇怪的崩溃日志,读取异常代码是0x8badf00d。堆栈跟踪显示应用程序执行的随机快照,但没有任何可疑之处。这很少发生,我无法找到如何重现它。有没有人更了解这种异常和异常代码?

以下是我的崩溃日志的摘录:

  

例外类型:00000020
  例外代码:0x8badf00d
  突出显示的主题:0

     

特定应用信息:
  无法停用

     

线程0:
  ...
  <这里没什么可疑的>
  ...

     

未知线程因未知风味而崩溃:5,state_count:1

7 个答案:

答案 0 :(得分:84)

0x8badf00d是监视程序在应用程序启动或终止时间过长时引发的错误代码。请参阅Apple的Crash Reporting for iPhone OS Applications文档

答案 1 :(得分:8)

是HexSpeak,请参见此处:http://en.wikipedia.org/wiki/Hexspeak

答案 2 :(得分:8)

如果您获得Exception Type: 00000020Exception Codes: 0x8badf00d,则看门狗超时崩溃报告。异常代码0x8badf00d称为"ate bad food"

最常见的reason for this crash is synchronous activity on main thread.修复是主线程上的switch to asynchronous activity

Screenshot for Apple document

Refer this Apple document for more detail.

答案 3 :(得分:1)

这是一个具有良好幽默感的开发者添加的失败代码。因为十六进制使用字母和数字,所以可以提出看起来大致像英语单词的十六进制数字,例如“0xdeadbeef”等。我确信异常具有特定含义,但是如果没有主要症状与之相关的,你可以毫不顾虑地忽略它。

答案 4 :(得分:1)

这是程序员开玩笑的想法。您必须为您的代码选择一个数字,但这个数字本身并不一定意味着什么。 8badf00d只是另一种写入数字2,343,432,205的方法,之所以被选中是因为当以十六进制表示异常日志时,它看起来很“有趣”。

答案 5 :(得分:1)

苹果提供的看门狗提出了{p> 0x8badf00d exception。在网络应用程序中看门狗超时崩溃的最常见原因是主线程上的同步网络。这里有四个因素:

  

同步网络 - 这是您发出网络请求并阻止等待响应的地方。

主线程 - 同步网络通常不太理想,但是如果你这样做会导致特定的问题主线程。请记住,主线程负责运行用户界面。如果你阻塞主线程任何大量的时间,用户界面变得无法接受地反应迟钝。

长时间超时 - 如果网络刚刚消失(例如,用户在火车上进入隧道),任何待处理的网络请求都会失败,直到某个超时到期为止。大多数网络超时以分钟为单位进行测量,这意味着主线程上的阻塞同步网络请求可以使用户界面一次无响应几分钟。

通过减少网络超时来避免此问题一个好主意。在某些情况下,网络请求可能需要几秒钟才能成功,如果您总是提早退出,那么您将永远不会取得任何进展。

看门狗 - 为了留住用户界面响应,iOS包括一个看门狗机制。如果您的应用程序未能及时响应某些用户界面事件(启动,暂停,恢复,终止),则监视程序将终止您的应用程序并生成监视程序超时崩溃报告。看门狗给你的时间没有正式记录,但它总是小于网络超时。

有两种常见的解决方案:

  

异步网络 - 解决此问题的最佳方法是异步运行网络代码。异步网络代码具有许多优点,其中最重要的是它可以让您安全地访问网络而不必担心线程。

辅助线程上的同步网络 - 如果它过于令人望而却步难以异步运行您的网络代码(也许您正在使用假定同步网络的大型可移植代码库),您可以通过在辅助线程上运行同步代码来避免监视程序。

请参阅苹果docs以获取更多信息。

答案 6 :(得分:-6)

当使用调试堆时,Microsoft的LocalAlloc(LMEM_FIXED)使用来自维基百科0xBAADF00D("糟糕的食物")的

来指示未初始化的分配堆内存。[7]