Заставить symbolicatecrash использовать определенный файл .app и .dSYM? - PullRequest
5 голосов
/ 11 июля 2011

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

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

Ответы [ 5 ]

10 голосов
/ 12 июля 2011

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

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

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

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

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

В ваших архивированных приложениях, если вы щелкнете по MyApp.app.dSYM, затем выберите «Информация», а затем откроете «Дополнительная информация», вы увидите dUYID-коды dSYM и два GUID в списке.Второй GUID является тем, который имеет отношение.Он будет иметь вид:

A95274A3-09D7-3458-A40C-B5A6FD317A1C

enter image description here

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

Ура, Эрик

5 голосов
/ 01 июня 2013

ОК, получается, что этот ответ - теперь то, что требуется для последней версии XCode 5.1.1:

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

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

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

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

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

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

к

   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

2 голосов
/ 03 февраля 2012

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

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

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

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

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

0 голосов
/ 31 марта 2019

Мне удалось заставить 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".

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

0 голосов
/ 10 мая 2014

Существует новый процесс извлечения UUID сборки, описанный здесь:

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

Теперь это магическая команда для запуска сборки UUID:

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