Как символизировать аварийный журнал Xcode?
У организатора Xcode 5 было представление, которое перечислит все журналы сбоев. и мы могли бы перетащить сюда аварийные журналы. Но с Xcode 6 я знаю, что они вывели устройства из строя и имеют новое окно для того же. Но я не нахожу место, где я просматриваю журналы сбоев, которые я перетаскиваю в Xcode 5 после перехода на Xcode 6. Кто-нибудь знает ответ?
14 ответов
Хорошо, я понял, что вы можете сделать это:
- В
Xcode > Window > Devices
выберите подключенный iPhone / iPad / и т. д. вверху слева. - Просмотр журналов устройства
- Все журналы
Вероятно, у вас там много журналов, и чтобы упростить поиск импортированных журналов позже, вы можете просто удалить все журналы на этом этапе... если они не означают для вас деньги. Или, если вы не знаете точный момент времени, когда произошел сбой - он все равно должен быть записан в файле... Я ленив, поэтому я просто удаляю все старые журналы (на самом деле это заняло некоторое время).
- Просто перетащите файл в этот список. Это сработало для меня.
Пишу этот ответ как для сообщества, так и для себя.
Если когда-либо возникают проблемы, символизирующие отчет о сбое, их можно преодолеть следующим образом:
Создать отдельную папку, скопировать
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 удерживайте Option и выберите необходимый текстовый блок или скопируйте и обрежьте), чтобы получить что-то вроде этого:
0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3
Теперь вы можете сохранить это в текстовом файле, например, addr.txt
и выполните следующую команду:
xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt
Это даст хорошую символику для всех адресов одновременно.
PS
Перед тем, как сделать выше, стоит проверить, что все настроено правильно (как atos
с радостью сообщит что-то по любому указанному адресу).
Чтобы выполнить проверку, откройте отчет о сбое и перейдите в конец стека вызовов для Thread 0
, Первая строка с конца для отображения вашего приложения (обычно вторая), например:
34 Foo 0x0033f9bb 0xd7000 + 2525627
должен быть main()
вызов. Символизирующий адрес (0x0033f9bb
в этом случае), как описано выше, следует подтвердить, что это действительно main()
а не какой-то случайный метод или функция.
Если адрес не адрес main()
проверьте адрес загрузки (-l
вариант) и арка (-arch
опция).
PPS
Если вышеуказанное не работает из-за битового кода, загрузите dSYM для вашей сборки из iTunes Connect, извлеките исполняемый двоичный файл из dSYM (Finder > Показать содержимое пакета), скопируйте его в каталог и используйте его (т.е. Foo
в качестве аргумента atos
вместо Foo.app/Foo
,
Вы также можете сослаться на это, я написал пошаговую процедуру ручной символизации сбоя.
ШАГ 1
Переместите все перечисленные выше файлы (MyApp.app, MyApp-dSYM.dSYM и MyApp-Crash-log.crash) в папку с удобным именем, куда бы вы ни направлялись, используя терминал легко.
Для меня Desktop - самое легкодоступное место;) Итак, я переместил эти три файла в папку MyApp на Desktop.
ШАГ 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 6Contents/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
Скопируйте файл symbolicatecrash из этого места и вставьте его на рабочий стол /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
Это оно!! На вашем терминале есть символические журналы… что же вы ждете? Теперь просто найдите ошибку и устраните ее;)
Удачного кодирования!!!
Для меня файла.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
Существует более простой способ использования XCode (без использования инструментов командной строки и поиска адресов по одному)
Возьмите любой файл.xcarchive. Если у вас есть один, прежде чем вы можете использовать это. Если у вас его нет, создайте его, запустив Product > Archive from Xcode.
Щелкните правой кнопкой мыши файл.xcarchive и выберите "Показать содержимое пакета".
Скопируйте файл dsym (версии приложения, которая потерпела крах) в папку dSYMs
Скопируйте файл.app (версии приложения, в котором произошел сбой) в папку "Продукты"> "Приложения".
Отредактируйте Info.plist и отредактируйте CFBundleShortVersionString и CFBundleVersion в словаре ApplicationProperties. Это поможет вам определить архив позже
Дважды щелкните по.xcarchive, чтобы импортировать его в Xcode. Это должен открыть Организатор.
Вернитесь к журналу сбоев (в окне "Устройства" в XCode)
Перетащите туда свой файл.crash (если его еще нет)
Весь журнал сбоев должен теперь быть символическим. Если нет, то щелкните правой кнопкой мыши и выберите "Re-символизировать журнал сбоев"
Xcode 11.2.1, декабрь 2019 г.
Apple предоставляет журнал сбоев в формате.txt, который не имеет обозначений.
**
С подключенным устройством
**
- Загрузите файл ".txt", измените расширение на ".crash"
- Открытие устройств и симуляторов из вкладки окна в Xcode
- выберите устройство и выберите журналы устройства
- перетащите файл.crash в окно журнала устройства
Мы сможем увидеть там символические журналы сбоев.
См. Ссылку для получения дополнительных сведений о символических журналах сбоев.
Если у вас есть файлы.dSYM и.crash в одной подпапке, вы можете предпринять следующие шаги:
- Рассматривая обратную трассировку в файле.crash, обратите внимание на имя двоичного изображения во втором столбце и адрес в третьем столбце (например, 0x00000001000effdc в приведенном ниже примере).
- Прямо под обратным следом в разделе "Двоичные изображения" запишите имя изображения, архитектуру (например, arm64) и адрес загрузки (0x1000e4000 в приведенном ниже примере) двоичного изображения (например, TheElements).
- Выполните следующее:
$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc
-[AtomicElementViewController myTransitionDidStop:finished:context:]
Официальный источник: https://developer.apple.com/library/content/technotes/tn2151/_index.html
Выполните эти шаги в Xcode 10, чтобы символизировать журнал сбоев от сборки приложения на том же компьютере:
- Внутри Organizer найдите архив, на котором основано приложение.
- Нажмите на кнопку Загрузить символы отладки. Ничего не появится в папке "Загрузки", но это нормально.
- Подключите сборочную машину к устройству iOS.
- Выберите устройство в разделе " Устройства и симуляторы".
- Нажмите на кнопку Просмотр журналов устройств.
- Перетащите файл аварии на левую панель. Файл должен заканчиваться расширением .crash, иначе перетаскивание завершится неудачно.
- Перейдите на вкладку Все журналы.
- Выберите добавленный файл сбоя.
- Файл должен автоматически символизировать, в противном случае используйте правой кнопкой мыши пункт контекстного меню Re-Symbolicate Log.
Убедитесь, что имя вашего приложения Xcode не содержит пробелов. Это было причиной того, что это не сработало для меня. Так /Applications/Xcode.app
работает, пока /Applications/Xcode 6.1.1.app
не работает
Из документов Apple:
Символизация отчетов о сбоях с Xcode Xcode автоматически попытается символизировать все отчеты о сбоях, с которыми он сталкивается. Все, что вам нужно сделать для символизации, это добавить отчет о сбое в Xcode Organizer.
- Подключите устройство iOS к вашему Mac
- Выберите "Устройства" в меню "Окно".
- В разделе "УСТРОЙСТВА" в левой колонке выберите устройство
- Нажмите кнопку "Просмотр журналов устройства" в разделе "Информация об устройстве" на правой панели.
- Перетащите отчет о сбое в левую колонку представленной панели.
Xcode автоматически символизирует отчет о сбое и отображает результаты. Чтобы символизировать отчет о сбое, Xcode должен быть в состоянии найти следующее:
Бинарный файл и файл dSYM, вызывающий сбой приложения.
Двоичные файлы и файлы dSYM для всех пользовательских сред, с которыми связано приложение. Для каркасов, которые были построены из исходного кода с приложением, их файлы dSYM копируются в архив вместе с файлом приложения dSYM. Для фреймворков, созданных сторонними разработчиками, вам нужно будет обратиться к автору за файлом dSYM.
Символы для ОС, на которой было запущено приложение, когда оно падало. Эти символы содержат отладочную информацию для платформ, включенных в конкретный выпуск ОС (например, iOS 9.3.3). Символы ОС зависят от архитектуры - выпуск iOS для 64-битных устройств не будет включать символы armv7. Xcode автоматически скопирует символы ОС с каждого устройства, которое вы подключаете к вашему Mac.
Если какой-либо из них отсутствует, XCode может не иметь возможности символизировать отчет о сбое или может только частично символизировать отчет о сбое.
Самый простой процесс для обозначения журналов аварий:
- сохраните файл xcarchive от организатора во время процесса построения IPA для будущего использования.
- Когда происходит сбой, соберите журналы сбоев с уязвимого устройства. Расширение должно быть.crash. Если журнал сбоя имеет формат.ips, просто переименуйте его в.crash.
- Дважды щелкните по xcarchive из сохраненного пути, чтобы он появился в органайзере (если его еще нет).
- откройте в окне xcode -> устройства и симуляторы -> просмотр журналов устройства -> все журналы -> перетащите файл.crash.
Подождите 5 сек. Взрыв! вызовы приложения в трассировке стека будут символизированы! Вы все еще можете увидеть много символов, хотя! это внутренние вызовы библиотеки и фреймворка.
Это самый простой, испытанный и проверенный!
Apple предоставляет журнал сбоев в формате.txt, который не имеет обозначений.
**
С подключенным устройством
**
- Загрузите файл ".txt", измените расширение на ".crash"
- Открытие устройств и симуляторов из вкладки окна в Xcode
- выберите устройство и выберите журналы устройства
- перетащите файл.crash в окно журнала устройства
Мы сможем увидеть там символические журналы сбоев.
См. Ссылку для получения дополнительных сведений о символических журналах сбоев.
The atos
Команда используется для обозначения адресов в трассировке стека программы или отчете о сбое. Он используется для преобразования адресов памяти из аварийного приложения обратно в удобочитаемые имена функций и номера строк.
atos -arch <architecture> -o <executable> -l <load address> <address1> <address2> ...
пример
atos -arch arm64 -o MyApp -l 0x1001d0000 0x00000001013425d4 0x0000000101342558 0x000000010144662c 0x0000000101420208
-acrh: для iOS Arm64 и для macOS x86_64
-o: имя исполняемого файла.
вы можете найти его в dsyms-> appName.app.dsyms -> щелкните правой кнопкой мыши -> показать содержимое пакета -> Содержимое -> Ресурсы -> DWARF -> appName. Переместите этот файл и журнал сбоя в ту же папку.
-l: адрес загрузки исполняемого файла
Найдите адрес в разделе «Двоичное изображение» в журнале сбоев.
Я изо всех сил пытался отобразить отчет о сбое через atos, но я не хотел, поскольку процесс кажется громоздким, но я нашел отчет о сбое в Xcode-> Window -> Organizer->Crashes(в левом меню) Xcode автоматически загрузит журналы сбоев и будут автоматически отображаться в виде символов. Отсюда вы можете легко найти причину сбоя.