Символизирует сбой без файла журнала сбоя - PullRequest
0 голосов
/ 10 марта 2019

Это не дубликат. Мой вопрос, как символизировать ошибку сбоя.

Мое живое приложение падает, и у меня есть отчет о сбое в xCode и crashlytics, но у меня нет аварийного журнала, поскольку это происходит в живом приложении, и это случайно.

Можно ли получить какой-то смысл из отчета о сбое без журнала сбоя?

Как мы узнаем номер файла и строки из таких отчетов?

Вот один из примеров такой аварии

crash_info_entry_0
abort() called
crash_info_entry_1
myapp(569,0x16df57000) malloc: *** error for object 0x10404ddae: pointer being freed was not allocated

1 Ответ

1 голос
/ 10 марта 2019

Символизация - это процесс перевода адресов в символы (функции, методы и т. Д.).Без журнала сбоев, который содержит эти адреса, символика не имеет смысла.Вы не можете переводить адреса, которых у вас нет.Но откуда появился вывод, который вы перечислили?Похоже, это может быть частью большего журнала.Вы отметили проблему Crashlytics - этот отчет пришел от их службы?

В журнале вы включили некоторую полезную информацию.Хорошая новость в том, что она говорит вам, что у вас куча коррупции.malloc вызвал abort, поскольку обнаружил несоответствие с его внутренними структурами.Кроме того, крайне маловероятно, что символическая трассировка стека поможет вам, потому что повреждение кучи редко, если вообще когда-либо, вызывается функциями, расположенными дальше по стеку.

Имейте в виду, что сбой, который вы видите здесь, эффект .Чтобы решить эту проблему, вам нужна причина , и трассировка стека не даст вам этого в этой ситуации.

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

Я бы порекомендовал здесь использовать различные инструменты, предоставляемые Apple, для отладки такого рода проблем.

  • Поиск других сбоев, которые выглядят кучейсвязанные с коррупцией
  • Попробуйте Zombies в инструментах
  • Попробуйте malloc scribble или guardmalloc, два других хороших средства отладки памяти

Это чрезвычайно обычно для одной ошибки, приводящей к повреждению кучи, вызывающей множество различных сбоев.Это может быть чрезмерным выпуском objc, поэтому я также следил за исключениями selectorNotRecognized.Эти сбои могут дать вам больше подсказки о том, какой объект перевыпускается.

Удачи!

...