Я пытаюсь символизировать сообщения о сбоях моего приложения для iPhone.
Я получил отчеты о сбоях из iTunes Connect. У меня есть двоичный файл приложения, который я отправил в App Store, и у меня есть файл dSYM, который был сгенерирован как часть сборки.
У меня есть все эти файлы вместе в одном каталоге, который индексируется в центре внимания.
Что теперь?
Я попытался вызвать:
symbolicatecrash crashreport.crash myApp.app.dSYM
и он просто выводит тот же текст, который находится в отчете о сбое, для начала, не символизированный.
Я делаю что-то неправильно?
ios
crash-reports
symbolicate
Jasarien
источник
источник
symbolicatecrash
команду, как ее использовать и как найти файл dSYM, необходимый для символизации.Ответы:
Шаги для анализа отчета о сбое от Apple:
Скопируйте файл выпуска .app, который был помещен в магазин приложений, файл .dSYM, созданный во время выпуска, и отчет о сбое, полученный из APPLE, в ПАПКУ .
Откройте приложение терминала и перейдите в созданную выше папку (используя
cd
команду)Беги
atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH
. Расположение памяти должно быть тем, в котором приложение терпело крах согласно отчету.Пример:
atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
Это покажет вам точную строку, имя метода, которое привело к сбою.
Пример:
[classname functionName:]; -510
Символизирующий МФА
если мы используем IPA для символизации - просто переименуйте расширение .ipa с помощью .zip, распакуйте его, тогда мы сможем получить папку полезных данных, содержащую приложение. В этом случае нам не нужен файл .dSYM.
Запись
Это может работать только в том случае, если в двоичном файле приложения нет символов. По умолчанию в сборках релиза отсутствуют символы. Мы можем изменить его в настройках сборки проекта "Разобрать символы отладки во время копирования" на NO.
Подробнее см. Этот пост
источник
atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c
и вы получите-[HUDWindow sizedHUDBackground] (in myApp) + 1197
Прочитав все эти ответы здесь для того, чтобы символизировать журнал сбоев (и, наконец, успешно), я думаю, что здесь не хватает некоторых моментов, которые действительно важны для определения того, почему вызов symbolicatecrash не производит символьный вывод.
Есть 3 ресурса, которые должны быть соединены вместе, когда символизирует журнал сбоев:
example.crash
), либо экспортированный из органайзера XCode, либо полученный из iTunes Connect..app
Пакет (то естьexample.app
) , что само по себе содержит приложение бинарного принадлежащий к аварии журнала. Если у вас есть.ipa
пакет (то естьexample.ipa
), то вы можете извлечь.app
пакет, распаковав.ipa
пакет (т.е.unzip example.ipa
). После этого.app
пакет находится в извлеченномPayload/
папке..dSYM
Пакет , содержащий символы отладки (то естьexample.app.dSYM
)Перед началом символизации вы должны проверить, совпадают ли все эти артефакты, что означает, что журнал сбоев принадлежит вашему двоичному файлу и что отладочные символы - те, которые были созданы при сборке этого двоичного файла.
Каждый двоичный файл обозначается UUID, который можно увидеть в файле журнала сбоев:
В этом фрагменте журнал сбоев принадлежит двоичному образу приложения с именем example.app/example с UUID
aa5e633efda8346cab92b01320043dc3
.Вы можете проверить UUID вашего двоичного пакета с помощью dwarfdump:
После этого вы должны проверить, принадлежат ли отладочные символы, которые у вас есть, этому двоичному файлу:
В этом примере все ресурсы совмещаются, и вы должны быть в состоянии символизировать свою трассировку стека.
Переходя к
symbolicatecrash
сценарию:В Xcode 8.3 вы должны иметь возможность вызывать скрипт через
Если его там нет, вы можете запустить его
find . -name symbolicatecrash
в каталоге Xcode.app, чтобы найти его.Как вы можете видеть, здесь больше нет параметров. Таким образом, скрипт должен найти двоичное и отладочное символы вашего приложения, выполнив поиск в центре внимания. Он ищет символы отладки с определенным индексом
com_apple_xcode_dsym_uuids
. Вы можете сделать этот поиск самостоятельно:соответственно
Первый вызов Spotlight дает вам все проиндексированные пакеты dSYM, а второй -
.dSYM
пакеты с определенным UUID. Если прожектор не найдет вашу.dSYM
посылку, то неsymbolicatecrash
будет ни того, ни другого. Если вы делаете все это, например, в подпапке вашего~/Desktop
внимания, вы сможете найти все.Если найден
symbolicatecrash
ваш.dSYM
пакет, в строке должна быть следующая строкаsymbolicate.log
:Для поиска вашей
.app
посылки, поиск по центру вызывается следующим образомsymbolicatecrash
:Если
symbolicatecrash
находит вашу.app
посылку, в ней должна быть следующая выпискаsymbolicate.log
:Если все эти ресурсы найдены,
symbolicatecrash
он должен распечатать символическую версию вашего журнала сбоев.Если нет, вы можете передать свои файлы dSYM и .app напрямую.
Примечание: символьная обратная трассировка будет выводиться на терминал, а не
symbolicate.log
.источник
No crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
DEVELOPER_DIR
переменную окружения , если скрипт жалуется на это нравится так:export DEVELOPER_DIR=`xcode-select --print-path`
. Я добавил эту строку в мой~/.bash_profile
. См. Stackoverflow.com/q/11682789/350761<SYMBOL_PATH> Additional search paths in which to search for symbol rich binaries
-o | --output <OUTPUT_FILE> The symbolicated log will be written to OUTPUT_FILE. Defaults to "-" (i.e. stdout) if not specified
-d | --dsym <DSYM_BUNDLE> Adds additional dSYM that will be consulted if and when a binary's UUID matches (may be specified more than once)
В последней версии Xcode (3.2.2) вы можете перетаскивать любые отчеты о сбоях в раздел «Журналы устройств» в Xcode Organizer, и они будут автоматически отображаться для вас. Я думаю, что это работает лучше всего, если вы создали эту версию приложения, используя Build & Archive (также часть Xcode 3.2.2)
источник
Я сделал это успешно, используя следующие шаги.
Шаг 1. Создайте папку на рабочем столе, я назову ее «CrashReport» и добавлю в нее три файла («MYApp.app», «MyApp.app.dSYM», «MYApp_2013-07-18.crash»).
Шаг 2: Откройте Finder и перейдите в Приложения, где вы найдете приложение Xcode, щелкните по нему правой кнопкой мыши и нажмите «Показать содержимое пакета», после этого следуйте по этому простому пути. "Содержание-> Разработчик-> Платформы-> iPhoneOS.platform-> Разработчик-> Библиотека-> PrivateFrameworks- > DTDeviceKit.framework -> Версии- > A-> Ресурсы"
ИЛИ
"Содержание-> Разработчик-> Платформы-> iPhoneOS.platform-> Разработчик-> Библиотека-> PrivateFrameworks- > DTDeviceKitBase.framework -> Версии- > A-> Ресурсы"
ИЛИ
Для Xcode 6 и выше путь является Applications / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Versions / A / Resources
Где вы найдете файл «symbolicatecrash», скопируйте его и вставьте в папку «CrashReport».
Шаг 3: запустить терминал, запустить эти 3 команды
cd / Users / mac38 / Desktop / CrashReport и нажмите кнопку Enter
export DEVELOPER_DIR = "/ Applications / Xcode.app / Contents / Developer" и нажмите Enter
источник
Unknown option: A
за symbolicatecrash, но процесс все равно запустилсяШаги для автоматической символизации отчета о сбое с использованием XCode:
ОБНОВЛЕНО ДЛЯ XCODE 9
Подключите любое устройство iOS к вашему Mac (да, физическое, да, я знаю, что это глупо)
Выберите «Устройства» в меню «Окно».
Нажмите ваше устройство слева и ПРОСМОТРЕТЬ ЖУРНАЛЫ УСТРОЙСТВА справа
Подождите. Это может занять минуту, чтобы появиться. Может быть,
Command-A
тогдаDelete
это ускорит это.Критический недокументированный шаг: переименуйте отчет о сбое, полученный из iTunesConnect, из
.txt
расширения в.crash
расширениеПеретащите отчет о сбое в эту область слева
И тогда Xcode будет символизировать отчет о сбое и отобразить результаты.
Источник: https://developer.apple.com/library/ios/technotes/tn2151/_index.html
источник
В своих приложениях я использую Airbrake, который неплохо справляется с удаленной регистрацией ошибок.
Вот как я символизирую их с помощью atos, если это необходимо обратному следу:
В Xcode (4.2) перейдите к органайзеру, щелкните правой кнопкой мыши по архиву, из которого был сгенерирован файл .ipa.
В Терминале, перейдите в xcarchive, например
MyCoolApp 10-27-11 1.30 PM.xcarchive
Введите следующее
atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp'
(не забывайте одинарные кавычки)Я не включаю свой символ в этот вызов. То, что вы получите, это блочный курсор на пустой строке.
Затем я копирую / вставляю свой код символа в курсор этого блока и нажимаю ввод. Вы увидите что-то вроде:
-[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)
Вы вернулись к курсору блока и можете вставить другие символы.
Возможность пройти через одну трассировку без повторного ввода первого бита - это хорошая экономия времени.
Наслаждайтесь!
источник
Я также поместил dsym, комплект приложений и журнал сбоев в один каталог перед запуском символического сбоя
Затем я использую эту функцию, определенную в моем .profile, чтобы упростить запуск symbolicatecrash:
Добавленные аргументы могут вам помочь.
Вы можете убедиться, что прожектор «видит» ваши файлы dysm, выполнив команду:
Ищите dsym, который есть в вашем каталоге.
ПРИМЕЧАНИЕ. Начиная с последней версии Xcode, каталог разработчика больше не существует. Вы можете найти эту утилиту здесь:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers ионы / А / Ресурсы / symbolicatecrash
источник
Просто и обновленный ответ для xcode 6.1.1.
ШАГОВ
1.Xcode> Window> Устройства.
2.Выберите устройство из списка устройств в разделе УСТРОЙСТВА.
3. Выберите Просмотр журналов устройства.
4.В разделе «Все журналы» вы можете перетащить файл drop.crash.
5.Xcode автоматически символизирует отчет о сбое для вас.
6. Вы можете найти символьный отчет о сбое, сопоставив его дату / время с датой / временем, указанными в вашем отчете о сбое.
источник
Несмотря на то, что я разрабатывал приложения уже несколько лет, я впервые отлаживал бинарный файл, и я чувствовал себя как полный NOOB, выясняющий, где все файлы, т.е. где находятся * .app * .dSYM и журналы сбоев? Мне пришлось читать несколько постов, чтобы понять это. Изображение стоит тысячи слов, и я надеюсь, что этот пост поможет кому-нибудь еще в будущем.
1- Сначала зайдите на itunesconnect и загрузите журналы сбоев. ПРИМЕЧАНИЕ. В большинстве случаев вы можете получить что-то вроде «Слишком мало отчетов отправлено для отображения». По сути, недостаточно пользователей отправили отчеты о сбоях в Apple, и в этом случае вы ничего не можете сделать в этот момент.
2. Теперь, если вы не изменили свой код с момента отправки двоичного кода в Apple, запустите Xcode для этого проекта и снова выполните Product -> Archive. В противном случае просто найдите ваш последний представленный двоичный файл и щелкните по нему правой кнопкой мыши.
источник
В Xcode 4.2.1 откройте Организатор , затем перейдите к журналам библиотеки / устройства и перетащите ваш файл .crash в список журналов аварий. Это будет символизировано для вас через несколько секунд.
Обратите внимание, что вы должны использовать тот же экземпляр Xcode, на котором была заархивирована исходная сборка (т.е. архив вашей сборки должен существовать в Организаторе ).
источник
Используя Xcode 4, задача еще проще:
и вуаля. Файл журнала импортируется и символизируется автоматически для вас. При условии, что вы сначала заархивировали сборку, используя Xcode -> Product -> Archive .
источник
Волшебный Xcode Organizer не настолько волшебен в символизации моего приложения. Я не получил никаких символов для отчетов о сбоях, которые я получил от Apple после неудачной отправки приложения.
Я попытался использовать командную строку, поместив отчет о сбое в ту же папку, что и файл .app (который я отправил в хранилище) и файл .dSYM:
Это обеспечивало только символы для моего приложения, а не основной базовый код, но это было лучше, чем дамп номера, который мне дает Организатор, и мне было достаточно, чтобы найти и исправить ошибку, с которой столкнулось мое приложение. Если кто-нибудь знает, как расширить это, чтобы получить символы Foundation, это будет оценено.
источник
В моем случае я перетаскивал отчеты о сбоях прямо из Почты в Организатор. По какой-то причине это не позволило символизировать сообщения о сбоях (хотелось бы знать, почему).
Сначала скопировав отчеты о сбоях на рабочий стол, а затем перетащив их оттуда в органайзер, они получили правильную символику.
Я знаю очень конкретный случай. Но думал, что поделюсь на всякий случай.
источник
Вот еще одна проблема, которую я имею с symbolicatecrash - она не будет работать с приложениями, в которых есть пробелы (например, «Test App.app»). Примечание. Я не думаю, что вы можете указывать пробелы в их имени при отправке, поэтому вы должны их все равно удалить, но если у вас уже есть сбои, требующие анализа, исправьте symbolicatecrash (4.3 GM) следующим образом:
источник
Для тех, кто использует Airbrake, есть солидный ответ выше, но он не будет работать для меня без настройки:
Работает для некоторых адресов памяти, но не для других, не знаю почему ...
источник
Комбинация, которая работала для меня, была:
Используя atos, я не смог определить правильную информацию о символах с помощью адресов и смещений, которые были в отчете о сбое . Когда я это сделал, я вижу что-то более значимое, и это кажется законным следом стека.
источник
Мне пришлось много взломать скрипт symbolicatecrash, чтобы он работал правильно.
Насколько я могу судить, symbolicatecrash сейчас требует, чтобы .app находился в том же каталоге, что и .dsym. Он будет использовать .dsym, чтобы найти .app, но не будет использовать dsym, чтобы найти символы.
Вы должны сделать копию вашего symbolicatecrash, прежде чем пытаться использовать эти патчи, которые заставят его выглядеть в dsym:
Вокруг строки 212 в функции getSymbolPathFor_dsymUuid
Вокруг строки 265 в функции matchUUID
источник
Это просто, после многих поисков я нашел четкие шаги для обозначения всего файла журнала сбоев.
Удачного кодирования,
Рияз
источник
Я предпочитаю сценарий, который будет символизировать все мои журналы сбоев.
Предпосылками
Создайте папку и положите туда 4 вещи:
symbolicatecrash
Perl-скрипт - есть много SO-ответов, которые говорят о его местонахожденииАрхив сборки, которая соответствует сбоям (из Xcode Organizer. Просто как
Show in Finder
и скопируйте) [я не уверен, что это необходимо]Все
xccrashpoint
пакеты - (из Xcode Organizer.Show in Finder
Вы можете скопировать все пакеты в каталоге или одну точку xccrash, которую вы хотели бы обозначить символом)Добавьте этот короткий скрипт в каталог:
Сценарий
Когда вы запустите скрипт, вы получите 2 каталога.
allCrashes
- все сбои от всехxccrashpoint
будут там.symboledCrashes
- тот же сбой, но теперь со всеми символами.Вам не нужно очищать каталог от старых сбоев перед запуском скрипта. это очистит автоматически. удачи!
источник
Я обнаружил, что большинство предложенных альтернатив не работает в последней версии XCode (протестировано с Xcode 10). Например, мне не повезло перетаскивание журналов .crash в Xcode -> Organizer -> Журналы устройств - просмотр.
Я рекомендую использовать инструмент Symbolicator https://github.com/agentsim/Symbolicator
источник
Чтобы обозначить сбои, Spotlight должен быть в состоянии найти файл .dSYM, который был сгенерирован одновременно с двоичным файлом, который вы отправили в Apple. Поскольку он содержит информацию о символе, вам не повезет, если он недоступен.
источник
Я немного рассердился из-за того факта, что здесь ничего не «просто работает», поэтому я провел некоторое расследование, и в результате получилось следующее:
Настройка: QuincyKit, который получает отчеты. Никакой символики не было установлено, так как я даже не мог понять, что они предлагают, чтобы я сработал.
Исправление: загрузка отчетов о сбоях с сервера онлайн. Они называются «сбой» и по умолчанию идут в папку ~ / Downloads /. Имея это в виду, этот сценарий будет "делать правильные вещи", а отчеты о сбоях будут отправляться в Xcode (органайзер, журналы устройств) и символизация будет выполнена.
Сценарий:
Вещи могут быть автоматизированы, куда вы можете перетащить в Xcode Organizer, выполнив две вещи, если вы используете QuincyKit / PLCR.
Во-первых, вам нужно отредактировать удаленный скрипт admin / actionapi.php ~ строка 202. Похоже, что метка времени неверна, поэтому файл заканчивается именем «crash», которое Xcode не распознает (ему нужно что-то точка аварии):
Во-вторых, на стороне iOS в QuincyKit BWCrashReportTextFormatter.m ~ строка 176, измените
@"[TODO]"
на,@"TODO"
чтобы обойти плохих персонажей.источник
atos устарела, поэтому, если вы работаете с OSX 10.9 или более поздней версии, вам может потребоваться запустить
xcrun atos
источник
Мне нравится использовать Textwrangler, чтобы точно определить ошибки в исходной загрузке приложения. (Данные о сбое будут найдены в вашей учетной записи itunesConnect.) Используя описанный выше метод Sachin, я копирую original.crash в TextWrangler, а затем копирую созданный мной файл symbolicatecrash в другой файл TextWrangler. Сравнивая два файла, выявляем различия. Файл symbolicatecrash будет иметь различия, которые указывают на файл и номер строки проблем.
источник
Мы используем Google Crashlytics для контроля аварийных журналов, ощущение очень своевременное и удобное в использовании.
Ссылки на документы: https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms
Все о пропавших без вести dSYMs Fabric включает в себя инструмент для автоматической загрузки dSYM вашего проекта. Инструмент запускается через скрипт / run, который добавляется в фазу сборки Run Script во время процесса адаптации. Однако могут быть определенные ситуации, когда загрузка dSYM не удалась из-за уникальных конфигураций проекта или если вы используете битовый код в своем приложении. Если загрузка не удалась, Crashlytics не может символизировать и отображать сбои, и на панели управления Fabric появится предупреждение «Missing dSYM».
Отсутствующие dSYM могут быть загружены вручную, следуя шагам, описанным ниже.
Примечание. В качестве альтернативы автоматизированному инструменту загрузки dSYM Fabric предоставляет инструмент командной строки (символы загрузки), который можно настроить вручную для запуска в процессе сборки проекта. См. Раздел загрузки символов ниже для инструкций по конфигурации.
...
источник