У организатора Xcode 5 было представление, в котором будут перечислены все журналы сбоев. и мы могли бы перетащить журналы аварийной ситуации. Но поскольку Xcode 6, я знаю, что они переместили устройства из организации и имеют новое окно для них. Но я не нашел места, где я просматриваю журналы сбоев, которые я перетаскивал в Xcode 5 после перехода на Xcode 6. Кто-нибудь знает ответ?
Как символизировать аварийный журнал Xcode?
Ответ 1
Хорошо, я понял, что вы можете это сделать:
- В
Xcode > Window > Devices
выберите подключенный верхний левый iPhone/iPad/etc. - Просмотр журналов устройств
- Все журналы
У вас, вероятно, много журналов, и для облегчения поиска вашего импортированного журнала позже вы можете просто пойти и удалить все журналы в этот момент... если они не означают для вас деньги. Или, если вы не знаете точный момент, когда произошел сбой - в любом случае он должен быть записан в файл... Я ленив, поэтому просто удалю все старые журналы (это заняло некоторое время).
- Просто перетащите свой файл в этот список. Это сработало для меня.
Ответ 2
Написание этого ответа как для сообщества, так и для меня.
Если возникают проблемы, символизирующие отчет о сбое, можно преодолеть их следующим образом:
-
Создайте отдельную папку, скопируйте
Foo.app
иFoo.app.dSYM
из соответствующего.xcarchive
в папку. Также скопируйте отчет.crash
в папку. -
Откройте отчет о сбое в TextEdit или в другом месте, перейдите в раздел
Binary Images:
и скопируйте там первый адрес (например,0xd7000
). -
cd
в папку. Теперь вы можете запустить следующую команду:xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb
Это символизирует символ по адресу 0x0033f9bb
. Обязательно выберите правильное значение для параметра -arch
(можно обрезать из первой строки в разделе Binary Images:
или узнать из Hardware Model:
в отчете о сбое и поддерживаемых приложениях арках).
Вы также можете скопировать необходимые адреса (например, стек вызовов потоков) из отчета о сбое непосредственно в текстовый файл (в TextEdit, удержать опцию и выбрать необходимый текстовый блок или скопировать и вырезать), чтобы получить что-то вроде этого
0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3
Теперь вы можете сохранить это в текстовый файл, например. addr.txt
и выполните следующую команду:
xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt
Это даст приятную символику для всех адресов сразу.
P.S.
Прежде чем делать это, стоит проверить, что все настроено правильно (поскольку atos
будет с радостью сообщать о чем-то в основном по любому предоставленному адресу).
Чтобы выполнить проверку, откройте отчет о сбое и перейдите в конец стека вызовов для Thread 0
. Первая строка с конца для отображения вашего приложения (обычно второго), например:
34 Foo 0x0033f9bb 0xd7000 + 2525627
должен быть вызов main()
. Символизирующий адрес (0x0033f9bb
в этом случае), как описано выше, должен подтвердить, что это действительно main()
, а не какой-либо случайный метод или функция.
Если адрес не относится к main()
, проверьте адрес загрузки (-l
) и arch (-arch
).
P.P.S.
Если вышеуказанное не работает из-за битового кода, загрузите dSYM для своей сборки из iTunes Connect, извлеките исполняемый двоичный файл из dSYM (Finder > Show Package Contents), скопируйте его в и используйте его (т.е. Foo
) в качестве аргумента atos
вместо Foo.app/Foo
.
Ответ 3
Вы также можете ссылаться на эту статью, я написал пошаговую процедуру Ручной повторной символики.
ШАГ 1
Переместите все вышеуказанные файлы (MyApp.app, MyApp-dSYM.dSYM и MyApp-Crash-log.crash) в папку с удобным названием, где вы можете легко использовать терминал.
Для меня Desktop - это наиболее легкодоступное место;) Итак, я переместил эти три файла в папку MyApp на рабочем столе.
ШАГ 2
Теперь его очередь Finder, перейдите к следующему пути, который применим для вашей версии XCODE.
Xcode 8, Xcode 9 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
Xcode 7.3
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
XCode 7 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
Xcode 6 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Ниже Xcode 6
Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Или Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
Скопируйте файл с символом crash из этого места и вставьте его на рабочий стол /MyApp (Подождите... Не слепо следуйте за мной, я вставляю файл sybolicatecrash в папку MyApp, тот, который вы создали на первом шаге в своем любимом месте, имея три файла.)
ШАГ 3
Откройте терминал и CD в папку MyApp.
cd Desktop/MyApp — Press Enter
export DEVELOPER_DIR=$(xcode-select --print-path)
- Нажмите Enter
./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM
- Нажмите Enter
Вот оно! Символизированные журналы находятся на вашем терминале... теперь чего вы ждете? Теперь просто, узнайте об ошибке и разрешите ее;)
Счастливое кодирование!!!
Ответ 4
Существует более простой способ использования Xcode (без использования инструментов командной строки и поиска адресов по одному)
-
Возьмите любой файл .xcarchive. Если у вас есть один, прежде чем вы сможете это использовать. Если у вас его нет, создайте его, запустив Product > Archive from Xcode.
-
Щелкните правой кнопкой мыши файл .xcarchive и выберите "Показать содержимое пакета"
-
Скопируйте dsym файл (из версии приложения, который разбился) в папку dSYMs
-
Скопируйте файл .app(версии приложения, который разбился) в папку "Продукты" > "Приложения"
-
Отредактируйте Info.plist и отредактируйте CFBundleShortVersionString и CFBundleVersion в словаре ApplicationProperties. Это поможет вам позже идентифицировать архив
-
Дважды щелкните значок .xcarchive, чтобы импортировать его в Xcode. Он должен открыть Организатор.
-
Вернитесь в журнал сбоев (в окне Устройства в Xcode)
-
Перетащите файл .crash(если он еще не присутствует)
-
Теперь весь аварийный журнал должен быть символическим. Если нет, щелкните правой кнопкой мыши и выберите "Re-symbolicate crash log"
Ответ 5
Убедитесь, что ваше имя приложения Xcode не содержит пробелов. Вот почему это не сработало для меня. Поэтому /Applications/Xcode.app
работает, а /Applications/Xcode 6.1.1.app
не работает.
Ответ 6
Из документов Apple:
Символизирующие отчеты о сбоях с помощью Xcode Xcode автоматически попытается символизировать все отчеты о сбоях, с которыми он сталкивается. Все, что вам нужно сделать для символики, - добавить отчет о сбое в Xcode Organizer.
- Подключите устройство iOS к вашему Mac
- Выберите "Устройства" в меню "Окно"
- В разделе "УСТРОЙСТВА" в левом столбце выберите устройство
- Нажмите "Просмотр журналов устройств" в разделе "Информация об устройстве" на правой панели.
- Перетащите отчет о сбое в левый столбец представленной панели.
-
Xcode автоматически символизирует отчет о сбое и отображает результаты Чтобы символизировать отчет о сбое, Xcode должен иметь возможность найти следующее:
-
Сбой двоичного файла приложения и dSYM.
-
Файлы двоичных файлов и dSYM для всех настраиваемых фреймворков, с которыми связано приложение. Для фреймворков, которые были созданы из источника с приложением, их файлы dSYM копируются в архив вместе с файлом dSYM приложения. Для фреймворков, которые были созданы сторонними разработчиками, вам нужно попросить автора для файла dSYM.
-
Символы для ОС, в которых выполнялось это приложение, когда он разбился. Эти символы содержат информацию об отладке для фреймворков, включенных в конкретную версию ОС (например, iOS 9.3.3). Символы ОС являются специфичными для архитектуры - выпуск iOS для 64-битных устройств не будет содержать символы armv7. Xcode автоматически копирует символы ОС с каждого устройства, которое вы подключаете к вашему Mac.
-
Если какой-либо из них отсутствует, Xcode может не иметь возможности символизировать отчет о сбое или может лишь частично символизировать отчет о сбое.
Ответ 7
Для меня достаточно файла .crash. Без файла .dSYM и файла .app.
Я запустил эти две команды на mac, где я создал архив, и он работал:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /yourPath/crash1.crash > /yourPath/crash1_symbolicated.crash