Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 8badf00d是什么意思?_Iphone_Crash - Fatal编程技术网

Iphone 8badf00d是什么意思?

Iphone 8badf00d是什么意思?,iphone,crash,Iphone,Crash,有时我的iPhone应用程序会崩溃,出现一个奇怪的崩溃日志,读取的异常代码是0x8badf00d。stacktraces显示应用程序执行的随机快照,但没有可疑之处。这种情况很少发生,我无法找到如何复制它。有人知道更多关于这种异常和异常代码的信息吗 以下是我的日记摘录: 异常类型:00000020 异常代码:0x8badf00d 突出显示的线程:0 特定于应用程序的信息: 无法停用 线程0: … 未知线程崩溃,具有未知的味道:5,状态\u计数:1 这是一个有幽默感的开发人员添加的失败代码。因为

有时我的iPhone应用程序会崩溃,出现一个奇怪的崩溃日志,读取的异常代码是0x8badf00d。stacktraces显示应用程序执行的随机快照,但没有可疑之处。这种情况很少发生,我无法找到如何复制它。有人知道更多关于这种异常和异常代码的信息吗

以下是我的日记摘录:

异常类型:00000020
异常代码:0x8badf00d
突出显示的线程:0

特定于应用程序的信息:
无法停用

线程0:

<这里没有可疑之处>

未知线程崩溃,具有未知的味道:5,状态\u计数:1


这是一个有幽默感的开发人员添加的失败代码。因为十六进制既使用字母也使用数字,所以可能会产生类似于英语单词的十六进制数字,例如“0xdeadbeef”,等等。我确信异常有特定的含义,但如果没有与之相关的主要症状,你可以忽略它而不必太担心。

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

它是HexSpeak,请参见此处:

0x8badf00d
是当应用程序启动或终止时间过长时,看门狗会引发的错误代码。请参阅维基百科中的苹果文档,微软的LocalAlloc(LMEM_FIXED)使用0xBAADF00D(“坏食物”)来指示使用调试堆时未初始化的已分配堆内存。[7]

如果您得到
异常类型:00000020
异常代码:0x8badf00d
,则它是看门狗超时崩溃报告。异常代码
0x8badf00d
称为
“吃了变质食品”

导致此崩溃的最常见原因是主线程上的同步活动。修复方法是在主线程上切换到异步活动


0x8badf00d异常
由苹果提供的看门狗引发。网络应用程序中看门狗超时崩溃的最常见原因是主线程上的同步联网。这里有四个促成因素:

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

主线程-同步联网通常不太理想,但如果您在主线程上进行,则会导致特定问题。请记住,主线程负责运行用户界面。如果长时间阻塞主线程,用户界面将变得不可接受的无响应。

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

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

  • 看门狗-为了保持用户界面的响应性,iOS包含了一个看门狗机制。如果您的应用程序未能及时响应某些用户界面事件(启动、挂起、恢复、终止),看门狗将杀死您的应用程序并生成看门狗超时崩溃报告。看门狗给你的时间没有正式记录,但总是少于网络超时

  • 有两种常见的解决方案:

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

    在辅助线程上同步网络-如果异步运行网络代码非常困难的话(可能您使用的是一个假定同步联网的大型可移植代码库),您可以通过在辅助线程上运行同步代码来避免监视程序


    有关更多信息,请参考苹果。

    我认为这不仅“看起来”有趣,而且很有趣!:-)并且可能意味着传递的参数无效。尽管所有人都解释了错误代码,但没有人真正回答这个问题。您能告诉我们您是如何导致异常的吗?我们如何才能找到有问题的代码和平?新的苹果文档,用于
    8badf00d
    ,最后是问题的答案,谢谢!我需要进一步调查以确认这是我的日志崩溃的实际原因,但由于您提供了指向官方来源的链接,我将接受它。通常这意味着您在某个地方有一个无限循环,或者您正在主线程上等待网络IO。用户也有可能强制退出应用程序。@rpetrich因此,例如,我的NSURLConnection与续订后台任务一致。您认为在这种情况下会发生0x8badf00d吗?因为这是我的理论。顺便说一句,你的答案是+1。@IBG这当然是可能的。我从未使用过这些API。谢谢。我通过测试证实了这一点。微软的LocalAlloc从何而来?