Получить предыдущий запуск, аварийные журналы на iPhone - PullRequest
4 голосов
/ 19 января 2011

Я пытаюсь написать функцию отчета о сбое, которая при запуске приложения после сбоя предложит отправить отчет о сбое на сервер.Я не могу найти, как получить журнал сбоев в приложении.Я видел, что для этого есть фреймворк ( PLCrashReporter ), однако этот фреймворк большой и мне не нужны большинство его функций.

Кто-нибудь знает, как просто получить доступ к журналу?

Спасибо, Гай.

Ответы [ 4 ]

14 голосов
/ 03 февраля 2011

Полагаю, у меня нет кармы, чтобы добавить комментарий к ответу Нимрода Гата, поэтому я должен предоставить свое продолжение здесь.Я постараюсь сделать его достойным отдельного ответа.

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

http://www.cocoadev.com/index.pl?SignalSafety

Обработка сбоев еще сложнее, чем обычная обработка сигналов, потому что вы можетеНе ожидайте, что процесс продолжит успешно выполняться после того, как ваш обработчик сигнала вернется.

Соблазнительно думать, что вы можете просто взломать более простое решение, и оно будет работать некоторое время, но есть веская причина, людикак у инженеров Google есть тысячи LoC, предназначенных для надежных отчетов о сбоях:

http://code.google.com/p/google-breakpad/

В iOS вам просто нужно использовать PLCrashReporter.На других платформах (таких как Mac OS X) вы должны использовать Google Breakpad.Нет смысла заново изобретать это колесо, если вы не собираетесь делать это не только правильно, но и лучше, чем то, что уже существует.

5 голосов
/ 20 января 2011

У меня была похожая проблема, и PLCrashReported казался слишком сложным для того, что я хотел сделать. Обратите внимание, что вы не можете получить доступ к отчету о сбое, сгенерированному Apple, PLCrashReport генерирует свои собственные отчеты и сохраняет их в папке кэша пользователя.

В конце концов, я использовал следующий пример: http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

это очень просто и удобно, просто зарегистрируйте исключение и обработчики сигналов, используя:

NSSetUncaughtExceptionHandler(&HandleException);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);

и получите трассировку стека с помощью метода backtrace в классе UncaughtExceptionHandler.

4 голосов
/ 29 мая 2011

Может быть, лучшим решением будет использование полностью специализированного решения / услуги end-2-end?Например, http://apphance.com. В настоящее время он находится на стадии закрытого бета-тестирования, но вы можете попросить об участии, и мы довольно быстро свяжемся с вами.Единственное, что вам нужно сделать, это зарегистрироваться для получения ключа API и встроить небольшую библиотеку фреймворков в ваше приложение (или файл .jar в Android).Затем вы получаете удаленный доступ не только к аварийным журналам, но и к журналам отладки, сгенерированным приложением, что делает его гораздо более полезным.На данный момент он предназначен для использования во время тестирования, но скоро появится облегченная версия, которую вы сможете встроить в приложение, выпущенное в магазине приложений.

Внутри фреймворка мы делаем все волшебствоподключение к инфраструктуре яблока и получение информации о сбоях, расшифровка трассировки стека и даже обработка случаев нехватки памяти.Все комментарии @nupark в полной мере верны: мы тратим бесчисленные часы на то, чтобы все работало бесперебойно - безопасность потоков, чтобы быть уверенными, что мы сможем сохранить все за время, необходимое для инфраструктуры Apple, до того, как ваше приложение будет окончательно убитополучение трассировки стека из нехватки памяти (это было действительно сложно).То же самое для Android - мы сделали несколько хитрых трюков, чтобы убедиться, что все работает нормально.

Отказ от ответственности: Я технический директор Polidea, компании, которая стоит за созданием и соавтором решения.

0 голосов
/ 30 мая 2013

Существует множество (SAAS) E2E решений, о которых вы, возможно, будете очень рады узнать.

Очень, очень просто интегрировать в ваше приложение

Веселись ...

  1. crashlytics (Бесплатно и мое предпочтение)
  2. hockeyapp
  3. bugSense
  4. Crittercism

В наши дни вы можете использовать встроенные отчеты о сбоях (iOS и Android)

  1. iOS (подключение к Itunes) - просмотр отчетов о сбоях
  2. Понимание отчетов о сбоях на iPhone OS
  3. Чтение отчетов о сбоях в Android Market
...