Crittercism не ловит некоторые из сбоев
Я работаю на Android и использую Crittercism для регистрации сбоев, но, к сожалению, он не улавливает все сбои. Много пропущенных аварий OutOfMemoryException
s, но не все исключения OOM пропущены. Я не мог понять какой-либо образец относительно того, когда он пойман, а когда нет!! Кто-нибудь знает, почему это происходит или как это обойти?
1 ответ
Причина отсутствия исключений "Недостаточно памяти" связана с природой JVM, которая обрабатывает определенные сценарии по сравнению с другими.
У меня нет списка сценариев, которые JVM любезно чистит под ковриком (то есть не насильственно убивает процесс приложения), но в этих случаях Crittercism может функционировать нормально и захватывать исключение Java Out of Memory. В другом случае, когда JVM сильно падает, Crittercism будет трудно захватить (однако ни один из аварийных репортеров не справится с этим, насколько я знаю в настоящее время).
Что касается других сценариев за пределами OOM, вот два других сценария, в которых Crash Reporter (не только Crittercism) испытывают трудности с захватом:
Приложение не отвечает - это еще один сценарий, когда ОС убивает процесс, и ничто не может быть запущено или завершено. Таким образом, репортеры не могут запечатлеть этот момент.
Переполнение стека - это случай, когда приложение переходит в поврежденное состояние и ОС убивает процесс. Хотя я не на 100% по этому сценарию.
Тем не менее, в Android Crittercism является одним из немногих, который обеспечивает удаленное отслеживание исключений NDK, которое будет захватывать при сбое JVM (то есть собственные исключения / сигналы Dalvik). Но, как я упоминал выше, в нём нет тонкостей управляемой памяти JVM, поэтому сбои более нестабильны, а OOM будет пропущен.
Надеюсь, это поможет!