2016-07-19 6 views
0

Я хочу понять, как работают инструменты, такие как crashlytics?Как работают инструменты, такие как crashlytics? Как они получают журнал аварий?

Похоже, они получают трассировку стека журнала ловушек только за несколько минут до броска и сбоя системы? Они получают доступ к какому-то аварийному дампу, который генерируется после сбоя? В Object-C у ​​нас был основной. возможно, прикрепить некоторый код во время выполнения, но быстро, как они справляются? Где я прикрепляю код, чтобы увидеть этот отчет о сбое?

ответ

5

Такие услуги потребовали от вас добавить SDK для предоставления отчетов о сбоях. SDK в основном делает две вещи:

  1. регистрирует различные обработчики сигналов, которые перехватывают сигналы BSD, которые запускают приложение для выхода из-за некоторой проблемы, например. объект пытается получить доступ к адресу памяти, который находится вне адресного пространства приложений.
  2. Зарегистрируйте обработчик исключаемых исключений, который перехватывает (Objective-C) исключения, которые не попадают ни в какой код.

Крах приложения, как правило, срабатывает один из тех (есть исключения, например, ошибки переполнения стека, которые могут быть обнаружены только с помощью Mach Exception обработчиков, которые некоторая SDKs поддержки, или если приложение убито ОС из-за некоторых нарушений, например, слишком долго блокирует основной поток).

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

Способ, которым это работает, не зависит от использования Objective-C, Swift, C, C++.

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

 Смежные вопросы

  • Нет связанных вопросов^_^