Я не очень знаком с Crashpad, но, посмотрев отчет, я думаю, что у меня есть представление о том, что происходит.
Вообще говоря, ваш процесс символизации будет работать для любой библиотеки - вашей или Apple. Вы просто должны указать atos
на источник символа, дать ему адрес загрузки + смещение, и все в порядке. dSYMs являются отличными источниками, но исполняемые файлы также могут быть источниками.
Однако критическая часть имеет доступ к источнику символов, который соответствует версии библиотеки, загруженной в ваш процесс при возникновении сбоя. Чтобы облегчить этот процесс, двоичные файлы на платформах Apple идентифицируются UUID. Вы можете прочитать этот uuid с dwarfdump -u /path/to/binary
.
Один из способов сделать это - просто попробовать процесс символизации на устройстве, где произошел сбой. Вот как работает ReportCrash. И, почему это может символизировать двоичные файлы Apple. Причина (я предполагаю), что она не работает для вашего приложения, заключается в том, что вы убираете символы из своих артефактов.
Однако у символизации есть некоторые недостатки. Один большой из них - у вас обычно нет доступа к dSYM. dSYMs содержат гораздо больше информации, чем просто адрес-> символьная информация. Итак, вы определенно хотите использовать их, если можете.
Альтернатива состоит в том, чтобы делать символику после факта, используя только данные из отчета. Огромная проблема с этим - вам все еще нужен доступ к источникам символов. Судя по опубликованному вами отчету, похоже, что система символов Crashpad могла найти / загрузить символы для dyld
. Полезно, что он включает в себя UUID для этого конкретного двоичного файла. Но если у вас нет копии поля, поставляемой с 10.9.5 (13F1911), вам не повезло. Даже доступ к macOS SDK для 10.9 недостаточен, потому что вам нужна именно эта сборка.
Учитывая, что CrashPad выдал предупреждения для стольких двоичных файлов, похоже, что он должен был хотя бы попытаться сделать некоторую символику. Возможно, требуется дополнительная настройка? Я знаю, что Apple несколько лет назад внесла некоторые изменения в API поиска символов (мне кажется, в iOS 7), что сделало процесс символизации на устройстве более сложным. Может ли быть так, что CrashPad с тех пор не обновлялся?
Это одна из причин существования размещенных систем отчетов о сбоях. Crashlytics (сервис, над которым я работал) индексирует каждую версию Apple OS для всех платформ, так что он может выполнять высококачественную символику на стороне сервера, чтобы решить именно эту проблему. Есть также множество других сервисов. Рассматривали ли вы размещенное решение?