Вы можете использовать String.Join .
string.Join("\n", errorMessages);
Символизация - это процесс перевода адресов в символы (функции, методы и т. Д.). Без журнала сбоев, который содержит эти адреса, символика не имеет смысла. Вы не можете переводить адреса, которых у вас нет. Но откуда появился вывод, который вы перечислили? Похоже, это может быть частью большего журнала. Вы отметили проблему Crashlytics - этот отчет пришел из их службы?
В журнале вы включили некоторую полезную информацию. Хорошая новость в том, что она говорит вам, что у вас куча коррупции. malloc
назвал abort
, потому что он обнаружил несоответствие с его внутренними структурами. Кроме того, крайне маловероятно, что символическая трассировка стека поможет вам, потому что повреждение кучи редко, если вообще когда-либо, вызывается функциями, расположенными дальше по стеку.
Имейте в виду, что авария, которую вы видите здесь, является эффектом . Чтобы устранить эту проблему, вам нужна причина , и трассировка стека не даст вам этого в этой ситуации.
Есть еще плохие новости. Трудно, и часто даже невозможно, рассуждать о кучной коррупции. Воспроизведение ошибки также может быть невозможным, поскольку повреждение памяти обычно не является детерминированным. Как вы заметили, сбой выглядит случайным. Это потому, что это, вероятно, так.
То, что я бы порекомендовал сделать здесь, - это использовать различные инструменты, предоставляемые Apple, для отладки такого рода проблем.
Zombies
в инструментах чрезвычайно очень часто бывает, что одна ошибка, приводящая к повреждению кучи, вызывает множество различных видов сбоев. Это может быть чрезмерным выпуском objc, поэтому я также следил за исключениями selectorNotRecognized. Эти сбои могут дать вам больше подсказок о том, какой тип объекта переиздан.
Удачи!