Wymuś symbolicatecrash do użycia określonego.app i.plik dSYM?

Mam .crash log z ad-hoc wersji mojej aplikacji, która symbolicatecrash odmawia symbolu. Już zastosowałem .patch usuwający polecenie " die " w symbolcatecrash po tym, jak apple złamało skrypt w XCode 3.2.6. Symbolicatecrash pracował dla innych dzienników awarii, ale odmawia symbolicznego tego. Moja aplikacja ad hoc została zbudowana i jest przechowywana w "zarchiwizowanych aplikacjach", więc nie ma powodu, dlaczego XCode nie powinien być w stanie go znaleźć. Nawet skopiowałem .app i .dSYM pliki tuż obok .dziennik wypadków, nic z tego.

Czy Jest jakiś sposób, aby zmusić symobolicatecrash do użycia konkretnego .app i .pliki dsym, nawet jeśli nie uważa, że ma zastosowanie?

Author: esilver, 2011-07-11

4 answers

Okazało się, że przypadkowo usunąłem kompilację powiązaną z dziennikiem awarii. symbolicatecrash używa poniższej logiki, aby dowiedzieć się, czy istnieją symbole związane z dziennikiem awarii:

Na dole każdego dziennika awarii znajduje się lista obrazów binarnych. Twój jest wymieniony jako pierwszy. Z twoim obrazem binarnym jest powiązany identyfikator guid. Na przykład:

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

Odpowiedni identyfikator guid to: a95274a309d73458a40cb5a6fd317a1c

Następnie używa narzędzia mdfind, które patrzy na metadane związane z plikami w systemie plików, dla postaci z wielkimi literami i dzielonymi wyrazami tego identyfikatora GUID.

Z zarchiwizowanych aplikacji, Jeśli klikniesz na MyApp.app.dSYM, następnie uzyskać informacje, a następnie ujawnić więcej informacji, pojawi się UID DSYM i dwa GUID wymienione. Drugim GUID jest ten, który jest istotny. Będzie miała postać:

A95274A3-09D7-3458-A40C-B5A6FD317A1C

Tutaj wpisz opis obrazka

Pod warunkiem, że drugi GUID pasuje do guid w .crash file, symbol crash będzie mógł znajdź i symbolizuj. Jeśli nie pasują, to jest zły kod binarny.

Pozdrawiam, Eric
 10
Author: esilver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-11 21:31:50

OK okazuje się, że ta odpowiedź jest teraz to, co jest wymagane dla najnowszego Xcode 5.1.1:

Ostatnio miałem dziennik awarii z ad-hoc budowania. XCode odmówił symboliki. Miałem zarchiwizowany build kilka godzin i chciałem wymusić symbolikę za pomocą mojego zarchiwizowanego build. Oto jak to zrobiłem:

1) Najpierw otworzyłem okno terminala i poszedłem do katalogu zawierającego moje Archiwum. Uruchomiłem tą komendę:

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

To wyciągnęło dsym_uuid zarchiwizowanej kompilacji. Tr polecenie konwertuje identyfikator guid z dużej litery z myślnikami na mały identyfikator guid bez myślników

[[6]}2) wszedłem doPlik z awarią i zmieniono identyfikator guid skojarzony z moim binarnym w dzienniku awarii na identyfikator guid skojarzony z xcdarchive na moim komputerze

Na przykład, poszedł z

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

Do

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

3) z terminala ustawiłem moje środowisko DEVELOPER_DIR var na:

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

4) w końcu uruchomiłem tę bestię polecenia:

/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

Zauważ, że ścieżka do symbolicatecrash zmienia się w nowszych wersjach XCode, do:

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

To polecenie Uruchom symbolicatecrash na Twoim archiwum używająccrash file you have

 5
Author: esilver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 22:31:50

Trochę dodatkowych informacji, które mogą pomóc.

Mam dwa uuid wymienione, i mój pierwszy pasuje do tego z dziennika awarii, nie drugi. Jednak mój crash pochodzi z urządzenia działającego ARM6, podczas gdy OPs pochodzi z jednego działającego ARM7

Wnioskuję więc, że każdy UUID pasuje do architektury, jeśli budujesz dla ARM6 i ARM7, a awaria pochodzi z urządzenia działającego ARM6, to będziesz musiał dopasować pierwszy UUID, jeśli działa ARM7 będziesz potrzebował drugiego.

Jeśli masz tylko jeden UUID, myślę, że prawdopodobnie zbudowałeś tylko jedną architekturę.

Jest to głównie dedukcja, ale wydaje się prawdopodobne.

 2
Author: Peter Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-03 16:14:58

Istnieje nowy proces ekstrakcji uuid kompilacji opisany tutaj:

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

Jest to teraz magiczne polecenie do uruchomienia, aby wyodrębnić uuid build:

xcrun dwarfdump --uuid Example.app/Example | tr '[:upper:]' '[:lower:]' | tr -d '-'
 0
Author: esilver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-09 20:02:52