Техническое примечание TN2151

Понимание и Анализирование Докладов Катастрофического отказа приложения для iOS

Когда сбои приложения, «отчет катастрофического отказа» создается, который очень полезен для понимания, что вызвало катастрофический отказ. Этот документ содержит важную информацию о том, как к symbolicate, поймите и интерпретируйте отчеты катастрофического отказа.

Введение
Понимание низких отчетов использования памяти
Анализирование докладов катастрофического отказа
Связанные документы
История версии документа

Введение

Когда сбои приложения на устройстве на iOS, «отчет катастрофического отказа» создается и сохранен на устройстве. Отчеты катастрофического отказа описывают условия, при которых завершенное приложение, в большинстве случаев включая полное отслеживание стека для каждого потока выполнения, и обычно очень полезны для отладки проблем в приложении. Если Вы - разработчик iOS, необходимо смотреть на эти, катастрофический отказ сообщает для понимания то, что отказывает приложение имеет, и затем попытайтесь фиксировать их.

Низкие отчеты использования памяти отличаются от других отчетов катастрофического отказа в этом нет никаких отслеживаний стека в этом типе отчетов. Когда низкий катастрофический отказ памяти происходит, необходимо исследовать образцы использования памяти и ответы на низкие предупреждения памяти. Этот документ указывает на Вас на несколько ссылок управления памятью, которые Вы могли бы счесть полезным.

Отчеты катастрофического отказа с отслеживаниями стека должны быть symbolicated, прежде чем они смогут быть проанализированы. Symoblication заменяет адреса памяти человекочитаемыми именами функций и номерами строки. Если Вы получите крешлоги от устройства через окно Organizer XCode, то они будут symbolicated для Вас автоматически после нескольких секунд. Иначе Вам будет нужно к symbolicate .crash файл самостоятельно путем импорта его к Организатору XCode. См. Symbolication для подробных данных.

Этот документ также говорит о кодах исключений, другой полезной информации для идентификации причины катастрофического отказа.

Понимание низких отчетов использования памяти

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

Формат низкого отчета использования памяти отличается от других отчетов катастрофического отказа в этом нет никаких отслеживаний стека для потоков приложения. Об использовании памяти каждого процесса сообщают с точки зрения числа страниц памяти, которые с этой записи составляют 4 КБ каждый. Вы будете видеть» (выброшенный за борт)» рядом с именем любого процесса, завершенного iOS для высвобождения памяти. Если Вы видите его рядом с именем своего приложения, подтверждающим, что приложение было завершено для использования слишком большого количества памяти. Иначе, причиной катастрофического отказа не было давление памяти. Ищите a .crash файл (описанный в следующем разделе) для получения дополнительной информации.

Когда Вы видите, что низкая память отказывает, вместо того, чтобы касается тем, что часть Вашего кода выполняла во время завершения, необходимо исследовать образцы использования памяти и ответы на низкие предупреждения памяти. Списки Справки Выделений памяти детализировали шаги о том, как использовать Инструмент Утечек для обнаружения утечек памяти, и как использовать функцию Allocations Instrument's Mark Heap для предотвращения памяти, от которой отказываются. Инструкции по Производительности Использования памяти обсуждают надлежащие способы реагировать на уведомления низкой памяти, а также много подсказок для использования памяти эффективно. Также рекомендуется проверить сеанс 2010 года WWDC, Усовершенствованный Анализ памяти с Инструментами.

Анализирование докладов катастрофического отказа

В отличие от низких отчетов использования памяти, большинство отчетов катастрофического отказа содержит отслеживания стека для каждого потока во время завершения. В этом разделе рассматриваются эти отчеты.

Symbolication

Самая интересная часть отчета катастрофического отказа является отслеживанием стека Вашего приложения в то время, когда остановилось выполнение. Эта трассировка подобна тому, что Вы видели бы при остановке выполнения в отладчике, за исключением того, что Вам не дают имена методов или имена функций, известные как символы. Вместо этого у Вас есть шестнадцатеричные адреса и исполняемый код - Ваше приложение или системные платформы - к которому они обращаются. Необходимо отобразить эти адреса на символы. Журналы не содержат информацию о символе, когда они выписаны. У Вас есть к symbolicate журналы, прежде чем можно будет проанализировать их.

Symbolication - разрешение отслеживания стека адресуется к методам исходного кода, и строки - требует двоичного файла приложения, загруженного на App Store и .dSYM файл, сгенерированный, когда был создан тот двоичный файл. Это должно быть точным совпадением - иначе, отчет не может быть полностью symbolicated. Важно, что Вы сохраняете каждую сборку распределенной пользователям (независимо от подробных данных того распределения) с .dSYM файл.

Команда «Archive» XCode упрощает, сохраняя соответствующий двоичный файл и .dSYM. Когда Вы используете команду «Archive» (путем выбора «Archive» из меню «Product» или путем нажатия Shift+Command+B), XCode соберет двоичный файл приложения и .dSYM содержание информации о символе вместе и хранит их в расположении в Вашей домашней папке. Можно найти все заархивированные приложения в Организаторе XCode под разделом «Archived». XCode автоматически найдет заархивированные заявления, когда symbolicating разрушат отчеты, и можно подать заархивированные заявки непосредственно к Подключению iTunes, гарантирующему что приложение и .dSYM то, что Вы заархивировали соответствие, что Вы выпускаете.

XCode будет автоматически symbolicate, весь катастрофический отказ сообщает, что это встречается, если это имеет .dSYM и двоичный файл приложения, представивший отчет катастрофического отказа. Учитывая отчет катастрофического отказа, соответствующий двоичный файл и .dSYM файл, все, что необходимо сделать для symbolication, должно добавить, что катастрофический отказ сообщает Организатору XCode. Откройте Xcode Organizer, выберите вкладку «Devices», выберите «Device Logs» под «LIBRARY» на вершине боковой панели, нажмите кнопку «Import» и выберите .crash файл. Когда это будет сделано, XCode будет автоматически symbolicate отчет катастрофического отказа и отображать результаты.

Коды исключений

В крешлоге строка, запускающаяся с текста Exception Codes: сопровождаемый одним или более шестнадцатеричными значениями. Это специфичные для процессора коды, которые могут дать Вам больше информации о природе катастрофического отказа.

  • Код исключения 0xbaaaaaad указывает, что журнал является stackshot всей системы, не отчетом катастрофического отказа. Для взятия stackshot нажмите кнопку «Домой» и любую кнопку громкости. Часто эти журналы случайно создаются пользователями и не указывают ошибку.

  • Код исключения 0xbad22222 указывает, что приложение VoIP было завершено iOS, потому что оно возобновлялось слишком часто.

  • Код исключения 0x8badf00d указывает, что приложение было завершено iOS, потому что произошел сторожевой тайм-аут. Приложение брало слишком долго, чтобы запустить, завершить, или реагировать на системные события. Одна частая причина этого делает синхронные сети на основном потоке. Независимо от того, что работа идет Thread 0: потребности, которые будут перемещены в фоновый поток или обработаны по-другому, так, чтобы это не блокировало основной поток.

  • Код исключения 0xc00010ff указывает, что приложение было уничтожено операционной системой в ответ на тепловое событие. Это может быть вследствие проблемы с определенным устройством, что этот катастрофический отказ произошел на, или среда, в которой этим управляли. Для подсказок относительно создания Вашего выполнения приложения более эффективно, посмотрите Оптимизацию Производительности и Питания iOS с Инструментами сеанс WWDC.

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

  • Код исключения 0xdeadfa11 обозначенный, что приложение было силой, завершенной пользователем. Выходы силы происходят, когда пользователь сначала удерживает кнопку On/Off, пока «понижение для выключений» не появляется, затем удерживает кнопку «Домой». Разумно предположить, что пользователь сделал это, потому что приложение стало безразличным, но это не гарантировало - выход силы будет работать над любым приложением.

Связанные документы

Для получения информации о том, как получить отчет катастрофического отказа, посмотрите Отладку Развернутые приложения для iOS.

Для получения информации о том, как использовать шаблон Instruments Zombies, чтобы фиксировать катастрофические отказы сверхвыпуска памяти, видеть сообщения Открытия, Отправленные В Освобожденные Объекты.

Для получения дополнительной информации об архивации приложения, посмотрите раздел Distributing Applications Потока операций руководства пользователя Xcode 4 и Тестирования с функцией Archive XCode.

Для получения дополнительной информации об интерпретации крешлогов, см. Отчеты Катастрофического отказа Понимания относительно iPhone OS Сеанс WWDC 2010 года.



История версии документа


ДатаПримечания
13.12.2012

Добавленная информация о большем количестве кодов исключений.

28.03.2012

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

01.03.2011

Обновленный для отражения изменений для iOS 4.0 и позже.

06.07.2010

Исправленная ошибка в документации.

18.05.2010

Обновленный для отражения изменений для iPhone OS 3.2 SDK и XCode 3.2.2.

01.06.2009

Добавленный более сильный акцент о потребности сохранить не только .dSYM файлы, но и двоичные файлы приложения также.

30.04.2009

Обновленный для службы крешлога Подключения iTunes.

18.02.2009

Обновленный для включения обходного решения для проблемы, препятствующей тому, чтобы код приложения был symbolicated.

29.01.2009

Новый документ, что важная информация для разработчиков, объясняющих, как к symbolicate, поймите и интерпретируйте отчеты катастрофического отказа.