Что означает 8badf00d?

Иногда мое приложение iPhone падает со странным crashlog, который считывает код исключения 0x8badf00d. В стеке показаны случайные снимки выполнения приложения, но ничего подозрительного. Это происходит очень редко, и я не могу понять, как его воспроизвести. Кто-нибудь знает больше об этом виде кода исключения и исключения?

Вот выдержка из моих crashlogs:

Тип исключения: 00000020
Коды исключений: 0x8badf00d
Вы не можете ответить в тему

Конкретная информация для приложения:
Не удалось отключить

Ветвь дискуссии:

Неизвестная нить разбилась с неизвестным ароматом: 5, state_count: 1

    0x8badf00d – это код ошибки, который сторожевой таймер поднимается, когда приложение слишком долго запускается или завершается. См. Отчет Apple Crash Reporting для iPhone OS Applications

    Это HexSpeak, см. Здесь: http://en.wikipedia.org/wiki/Hexspeak

    Если вы получаете Exception Type: 00000020 и Exception Codes: 0x8badf00d то это отчеты о сбоях тайм-аута сторожевого таймера . Код исключения 0x8badf00d называется "ate bad food" .

    Наиболее распространенной reason for this crash is synchronous activity on main thread. Исправление состоит в том, чтобы switch to asynchronous activity в основном streamе.

    Снимок экрана для документа Apple

    Для получения более подробной информации обратитесь к этому документу Apple.

    Это код ошибки, добавленный разработчиком с хорошим чувством юмора. Поскольку шестнадцатеричное число использует буквы, а также числа, можно найти шестнадцатеричные числа, которые выглядят примерно так же, как английские слова, такие как «0xdeadbeef» и т. Д. Я уверен, что исключение имеет конкретное значение, но если нет никаких основных симптомов связанный с ним, вы, вероятно, можете игнорировать его без особого беспокойства.

    Это идея программиста о шутке. Вы должны выбрать номер для своего кода, но этот номер не обязательно означает что-то само по себе. 8badf00d – это еще один способ записать номер 2,343,432,205 и был выбран потому, что он выглядит «забавным», если он представлен в шестнадцатеричном виде для журнала исключений.

    0x8badf00d exception при помощи сторожевого таймера. Наиболее распространенной причиной сбоя тайм-аута сторожевого таймера в сетевом приложении является синхронная сеть в основном streamе. Здесь есть четыре фактора:

    синхронная сеть. Здесь вы делаете сетевой запрос и блокируете ожидающий ответ.

    Основной stream. Синхронная сеть в целом не идеальна, но вызывает определенные проблемы, если вы делаете это в основном streamе. Помните, что основной stream отвечает за запуск пользовательского интерфейса. Если вы блокируете основной stream за какое-то значительное время, пользовательский интерфейс становится неприемлемо невосприимчивым.

    длинные таймауты. Если сеть просто уходит (например, пользователь находится в поезде, который входит в туннель), любой ожидающий сетевой запрос не сработает, пока не истечет некоторое время ожидания. Большинство сетевых тайм-аутов измеряются в минутах, что означает, что заблокированный синхронный сетевой запрос в основном streamе может поддерживать пользовательский интерфейс в течение нескольких минут.

    Попытка избежать этой проблемы путем сокращения сетевого тайм-аута – не очень хорошая идея. В некоторых ситуациях может потребоваться много секунд, чтобы сетевой запрос был успешным, и если вы всегда начинаете рано, вы никогда не достигнете какого-либо прогресса.

    сторожевой таймер – для того, чтобы пользовательский интерфейс реагировал, iOS включает механизм сторожевого таймера. Если ваше приложение не сможет своевременно реагировать на определенные события пользовательского интерфейса (запуск, приостановка, возобновление, завершение), сторожевой таймер убьет ваше приложение и сгенерирует отчет о сбое тайм-аута сторожевого таймера. Количество времени, которое сторожевой таймер дает вам, официально не задокументировано, но оно всегда меньше, чем сетевой тайм-аут.

    Существует два распространенных решения:

    асинхронная сеть. Лучшим решением этой проблемы является asynchronous запуск сетевого кода. Асинхронный сетевой код имеет ряд преимуществ, в том числе и то, что он позволяет безопасно осуществлять доступ к сети, не беспокоясь о streamах.

    синхронная сетевая связь на вторичном streamе. Если вам сложно запускать сетевой код асинхронно (возможно, вы работаете с большой портативной кодовой базой, которая предполагает синхронную сеть), вы можете избежать сторожевого таймера, запустив свой синхронный код на вторичном streamе.

    Обратитесь к яблочным документам за дополнительной информацией.

    из wikipedia 0xBAADF00D («плохое питание») используется Microsoft LocalAlloc (LMEM_FIXED) для указания неинициализированной выделенной памяти кучи при использовании кучи отладки [7].

    Давайте будем гением компьютера.