Заставить symbolicatecrash использовать определенный файл .app и .dSYM?

У меня есть журнал .crash из специальной версии моего приложения, в котором symbolicatecrash отказывается отображать символы. Я уже применил .patch для удаления команды 'die' в symbolicatecrash после того, как Apple сломала скрипт в XCode 3.2.6. Symbolicatecrash работал с другими журналами сбоев, но отказывается символизировать этот. Мое специальное приложение было создано и хранится в «Архивных приложениях», поэтому нет причин, по которым XCode не может его найти. Я даже скопировал файлы .app и .dSYM прямо рядом с журналом .crash, без кубиков.

Есть ли способ заставить symobolicatecrash использовать определенные файлы .app и .dsym, даже если он не считает, что это применимо?


person esilver    schedule 11.07.2011    source источник


Ответы (5)


Оказалось, что я случайно удалил сборку, связанную с журналом сбоев. symbolicatecrash использует следующую логику, чтобы выяснить, есть ли символы, связанные с журналом сбоев:

Внизу каждого журнала сбоев находится список двоичных изображений. Ваш указан первым. Есть руководство, связанное с вашим двоичным изображением. Например:

0x1000 -   0x2befff +MyApp armv7  <a95274a309d73458a40cb5a6fd317a1c> /var/mobile/Applications/91884634-DA1A-4BDB-9E1E-6F487D8F25D7/MyApp.app/MyApp

Соответствующий гид: a95274a309d73458a40cb5a6fd317a1c

Затем он использует инструмент mdfind, который просматривает метаданные, связанные с файлами в вашей файловой системе, на предмет наличия в этом GUID прописных букв и дефисов.

Если в ваших заархивированных приложениях щелкнуть MyApp.app.dSYM, затем получить информацию, а затем раскрыть дополнительную информацию, вы увидите список dSYM UUID и два GUID. Второй GUID является актуальным. Он будет иметь вид:

A95274A3-09D7-3458-A40C-B5A6FD317A1C

введите описание изображения здесь

При условии, что второй GUID совпадает с guid в файле .crash, символический сбой можно будет найти и обозначить. Если они не совпадают, это неправильный двоичный файл.

Привет, Эрик

person esilver    schedule 11.07.2011
comment
Я не вижу никаких идентификаторов UUID, прикрепленных к моим пакетам dSYM, созданным в xcode 4. Apple по-прежнему работает так же? - person pzearfoss; 05.01.2012
comment
Мой файл dSYM содержит только список UDID (который соответствует UUID в журнале сбоев). Каким должен быть первый dSYM UUID? - person Erik; 25.01.2012
comment
Для универсальных приложений (armv6 и armv7) первый UUID предназначен для двоичного файла armv6, а второй - для файла armv7. - person Shawn Craver; 07.03.2012

Хорошо, теперь этот ответ является тем, что требуется для последней версии XCode 5.1.1:

Недавно у меня был журнал сбоев из специальной сборки. XCode отказался от использования символов. У меня была заархивированная сборка, сделанная несколько часов назад, и я хотел принудительно выполнить символику, используя мою заархивированную сборку. Вот как я это сделал:

1) Сначала я открыл окно терминала и перешел в каталог, содержащий мой архив. Я выполнил эту команду:

xcrun dwarfdump --uuid Example.app/Example | tr '[:upper:]' '[:lower:]' | tr -d '-'

Это вытащило dsym_uuid заархивированной сборки. Команда tr преобразует guid из верхнего регистра с дефисами в нижний регистр без тире.

2) Я вошел в файл .crash и изменил guid, связанный с моим двоичным файлом в журнале сбоев, на guid, связанный с xcdarchive на моей машине.

Например, пошли с

   0x80000 -   0x49efff +MyApp armv7  <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa> /var/mobile/Applications/DC23BDC0-75E3-4DCA-8AC3-099889CE22E0/MyApp.app/MyApp

to

   0x80000 -   0x49efff +MyApp armv7  <bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb> /var/mobile/Applications/DC23BDC0-75E3-4DCA-8AC3-099889CE22E0/MyApp.app/MyApp

3) С терминала я установил свою переменную среды DEVELOPER_DIR на:

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

4) Наконец, я выполнил эту чудовищную команду:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash -v MyApp.crash /Users/me/Library/Developer/Xcode/Archives/2013-05-31/MyApp\ 5-31-13\ 7.00\ PM.xcarchive/Products/Applications/MyApp.app

Обратите внимание, что путь к символической ошибке в новых версиях XCode меняется на:

 /Applications/Xcode6.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

Эта команда запускает symbolicatecrash для вашего архива, используя имеющийся у вас файл .crash.

person esilver    schedule 01.06.2013
comment
Xcode 5 на сегодняшний день: мне не удалось найти там двоичный файл symbolicatecrash. Я нашел его здесь: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash благодаря stackoverflow.com/a/8648232/129202 - person Jonny; 23.01.2014
comment
Обновлен путь в соответствии с вашим комментарием. - person esilver; 10.05.2014

Небольшая дополнительная информация, которая может помочь.

У меня перечислено два UUID, и мой первый совпадает с тем, который указан в журнале сбоев, а не вторым. Однако мой сбой происходит из-за устройства под управлением ARM6, тогда как OP - из-за того, что работает под управлением ARM7.

Поэтому я делаю вывод, что каждый UUID соответствует архитектуре, если вы создаете для ARM6 и ARM7, а сбой происходит из-за устройства, работающего на ARM6, вам необходимо сопоставить первый UUID, если он работает под управлением ARM7, вам понадобится второй.

Если у вас только один UUID, я думаю, вы, вероятно, построили только для одной архитектуры.

В основном это дедукция, но кажется вероятной.

person Peter Johnson    schedule 03.02.2012

Здесь описан новый процесс извлечения UUID сборки:

https://developer.apple.com/library/ios/qa/qa1765/_index.html

Теперь это волшебная команда, которую нужно запустить для извлечения UUID сборки:

xcrun dwarfdump --uuid Example.app/Example | tr '[:upper:]' '[:lower:]' | tr -d '-'
person esilver    schedule 09.05.2014

Мне удалось заставить symbolicatecrash символизировать мой журнал сбоев, заменив UUID dSYM на UUID ожидаемого сбоя.

Поместите dsym и unsymbolicated.crash в одну папку.

Запустите ./symbolicatecrash в подробном режиме:

./symbolicatecrash unsymbolicated.crash > symbolicated.crash -d ./MyApp.app.dSYM/ -v 

Прокрутите вниз и найдите ожидаемый UUID аварийного журнала:

Did not find dsym for db3e90fa8b6d462c9d65049ab1f22ea4
-- [db3e90fa8b6d462c9d65049ab1f22ea4] NO MATCH (spotlight)

В Finder щелкните правой кнопкой мыши файл .dsym и нажмите «Получить информацию» под заголовком раздела «Дополнительная информация». У вас будет свойство dSYM UUIDs :. Скопируйте это значение в буфер обмена.

Используя шестнадцатеричный редактор (я использовал iHex из App Store) откройте MyApp.dysm/Contents/Resources/DWARF/MyApp и CMD + F скопированный UUID.

Замените этот UUID на ожидаемый, в этом примере я заменил его на: "db3e90fa8b6d462c9d65049ab1f22ea4".

ПРИМЕЧАНИЕ. Хотя это исключительно хакерский метод и не гарантирует успеха, более вероятно, что это приведет к ошибочно обозначенному сбою с бессмысленными именами методов, но, возможно, это сработает для вас!

person Vlad    schedule 30.03.2019