Как символизировать аварийный журнал Xcode?

У организатора Xcode 5 было представление, в котором будут перечислены все журналы сбоев. и мы могли бы перетащить журналы аварийной ситуации. Но поскольку Xcode 6, я знаю, что они переместили устройства из организации и имеют новое окно для них. Но я не нашел места, где я просматриваю журналы сбоев, которые я перетаскивал в Xcode 5 после перехода на Xcode 6. Кто-нибудь знает ответ?

Ответ 1

Хорошо, я понял, что вы можете это сделать:

  • В Xcode > Window > Devices выберите подключенный верхний левый iPhone/iPad/etc.
  • Просмотр журналов устройств
  • Все журналы

У вас, вероятно, много журналов, и для облегчения поиска вашего импортированного журнала позже вы можете просто пойти и удалить все журналы в этот момент... если они не означают для вас деньги. Или, если вы не знаете точный момент, когда произошел сбой - в любом случае он должен быть записан в файл... Я ленив, поэтому просто удалю все старые журналы (это заняло некоторое время).

  1. Просто перетащите свой файл в этот список. Это сработало для меня.

Ответ 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