Organizator Xcode 5 miał widok z listą wszystkich dzienników awarii. i moglibyśmy przeciągnąć tutaj dzienniki awarii. Ale od Xcode 6 wiem, że wyprowadzili urządzenia z organizacji i mają nowe okno na to samo. Ale nie znajduję miejsca, w którym przeglądam dzienniki awarii, które przeciągnąłem do Xcode 5 po aktualizacji do Xcode 6. Czy ktoś zna odpowiedź?
189
Odpowiedzi:
Ok, zdałem sobie sprawę, że możesz to zrobić:
Xcode > Window > Devices
wybierz podłączony iPhone / iPad / etc w lewym górnym rogu.Prawdopodobnie masz tam wiele dzienników, a aby łatwiej znaleźć później zaimportowany dziennik, możesz po prostu usunąć wszystkie dzienniki w tym momencie ... chyba że oznaczają dla ciebie pieniądze. Lub chyba, że znasz dokładny moment awarii - i tak powinien zostać zapisany w pliku ... Jestem leniwy, więc po prostu usuwam wszystkie stare logi (tak naprawdę zajęło to trochę czasu).
źródło
.crash
.Piszę tę odpowiedź zarówno dla społeczności, jak i dla siebie.
Jeśli kiedykolwiek wystąpią problemy symbolizujące raport o awarii, można je rozwiązać w następujący sposób:
Utwórz osobny folder, skopiuj
Foo.app
iFoo.app.dSYM
z odpowiedniego.xcarchive
do folderu. Skopiuj również.crash
raport do folderu.Otwórz raport o awarii w TextEdit lub w innym miejscu, przejdź do
Binary Images:
sekcji i skopiuj tam pierwszy adres (np0xd7000
.).cd
do folderu. Teraz możesz uruchomić następujące polecenie:xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb
Będzie to symbolizować symbol pod adresem
0x0033f9bb
. Upewnij się, że wybrano prawidłową wartość dla tej-arch
opcji (można ją uzyskać z pierwszego wiersza wBinary Images:
sekcji lub dowiedzieć się zHardware Model:
raportu o awarii i obsługiwanych łuków aplikacji).Możesz także skopiować niezbędne adresy (np. Stos wywołania wątku) z raportu o awarii bezpośrednio do pliku tekstowego (w TextEdit, przytrzymaj Option i wybierz wymagany blok tekstowy lub skopiuj i wytnij), aby uzyskać coś takiego:
Teraz możesz zapisać to w pliku tekstowym, np.
addr.txt
I uruchomić następującą komendę:To da ładną symbolikę dla wszystkich adresów jednocześnie.
PS
Przed zrobieniem powyższego warto sprawdzić, czy wszystko jest skonfigurowane poprawnie (co
atos
chętnie zgłosi coś dla praktycznie dowolnego podanego adresu).Aby to sprawdzić, otwórz raport o awarii i przejdź do końca stosu wywołań dla
Thread 0
. Pierwszy wiersz od końca do listy aplikacji (zwykle drugi), np .:powinno być
main()
wezwanie. Symbolizowanie adresu (0x0033f9bb
w tym przypadku), jak opisano powyżej, powinno potwierdzić, że jest to rzeczywiście,main()
a nie jakakolwiek przypadkowa metoda lub funkcja.Jeśli adres nie jest adresem
main()
, sprawdź adres ładowania (-l
opcja) i arch (-arch
opcja).PPS
Jeśli powyższe nie działa z powodu kodu bitowego , pobierz dSYM dla swojej kompilacji z iTunes Connect, rozpakuj wykonywalny plik binarny z dSYM (Finder> Pokaż zawartość pakietu), skopiuj go do katalogu i użyj go (tj.
Foo
) Jako argument doatos
zamiast zamiastFoo.app/Foo
.źródło
xcrun dwarfdump --uuid <path to executable>
./symbolicate.sh mycrash.crash MyApp.app arch64 output.crash
Tylko symbolizuje pełny raport o awarii i daje symboliczną wersję tego raportu. gist.github.com/nathan-fiscaletti/…Możesz również odnieść się do tego, napisałem krok po kroku procedurę ręcznej re-symbolizacji awarii.
Ponowna symbolizacja awarii
KROK 1
Przenieś wszystkie powyższe pliki (MyApp.app, MyApp-dSYM.dSYM i MyApp-Crash-log.crash) do folderu o wygodnej nazwie, gdziekolwiek możesz łatwo użyć Terminalu.
Dla mnie Desktop jest najłatwiej dostępnym miejscem;) Tak więc przeniosłem te trzy pliki do folderu MyApp na pulpicie.
KROK 2
Teraz kolej na Findera, przejdź do ścieżki, która jest odpowiednia dla twojej wersji XCODE.
Użyj tego polecenia, aby znaleźć
symbolicatecrash
plik skryptu,find /Applications/Xcode.app -name symbolicatecrash
Xcode 8, Xcode 9, Xcode 11
/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
Niższy niż Xcode 6
Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Lub
Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
KROK 3
Dodaj katalog znalezionego pliku skryptu symbolicatecrash do
$PATH
zmiennej env w następujący sposób:sudo vim /etc/paths.d/Xcode-symbolicatecrash
wklej katalog pliku skryptu i zapisz plik. Otwierając nowy terminal, możesz wywoływaćsymbolicatecrash
w dowolnym folderze jako polecenia znajdujące się w/usr/bin
.Lub
Skopiuj plik symbolicatecrash z tej lokalizacji i wklej go do pulpitu / MyApp (Czekaj… Nie ślepo mnie obserwuj, wklejam plik sybolicatecrash w folderze MyApp, utworzonym w kroku pierwszym w ulubionej lokalizacji, mając trzy pliki. )
KROK 4
Otwórz terminal i włóż dysk CD do folderu MyApp.
- Naciśnij Enter
- Naciśnij Enter
Otóż to !! Symboliczne logi są na twoim terminalu… teraz na co czekasz? Teraz po prostu znajdź błąd i rozwiąż go;)
Happy Coding !!!
źródło
xcode-select --print-path
Dla mnie wystarczył plik .crash. Bez pliku .dSYM i pliku .app.
Uruchomiłem te dwa polecenia na komputerze Mac, na którym buduję archiwum i działało:
źródło
Istnieje łatwiejszy sposób korzystania z Xcode (bez użycia narzędzi wiersza poleceń i wyszukiwania adresów pojedynczo)
Weź dowolny plik .xcarchive. Jeśli masz go wcześniej, możesz go użyć. Jeśli go nie masz, utwórz go, uruchamiając Produkt> Archiwum z Xcode.
Kliknij prawym przyciskiem myszy plik .xcarchive i wybierz opcję „Pokaż zawartość pakietu”
Skopiuj plik dsym (wersji aplikacji, która uległa awarii) do folderu dSYMs
Skopiuj plik .app (wersji aplikacji, która uległa awarii) do folderu Produkty> Aplikacje
Edytuj Info.plist i edytuj CFBundleShortVersionString i CFBundleVersion w słowniku ApplicationProperties. Pomoże to później zidentyfikować archiwum
Kliknij dwukrotnie plik .xcarchive, aby zaimportować go do Xcode. Powinien otworzyć Organizer.
Wróć do dziennika awarii (w oknie Urządzenia w Xcode)
Przeciągnij tam swój plik .crash (jeśli jeszcze go nie ma)
Cały dziennik awarii powinien być teraz symbolizowany. Jeśli nie, kliknij prawym przyciskiem myszy i wybierz „Ponownie symbolizuj dziennik awarii”
źródło
Wykonaj następujące kroki w Xcode 10, aby symbolizować dziennik awarii z aplikacji zbudowanej na tym samym komputerze:
źródło
Jeśli masz plik .dSYM i plik .crash w tym samym podfolderze, wykonaj następujące czynności:
$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc -[AtomicElementViewController myTransitionDidStop:finished:context:]
Autorytatywne źródło: https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS
źródło
Xcode 11.2.1, grudzień 2019
**
**
Będziemy mogli tam zobaczyć symboliczne dzienniki awarii
Zobacz link, aby uzyskać więcej informacji na temat symbolicznych dzienników awarii
źródło
Upewnij się, że nazwa aplikacji Xcode nie zawiera spacji. To był powód, dla którego to nie działało. Tak
/Applications/Xcode.app
działa, a/Applications/Xcode 6.1.1.app
nie działa.źródło
Z dokumentów Apple:
Symbolizowanie raportów o awariach za pomocą Xcode Xcode automatycznie podejmie próbę symbolizacji wszystkich napotkanych raportów o awariach. Wszystko, co musisz zrobić, aby utworzyć symbolikę, to dodać raport o awarii do Organizatora Xcode.
Xcode automatycznie symbolizuje raport o awarii i wyświetla wyniki Aby symbolizować raport o awarii, Xcode musi być w stanie zlokalizować:
Plik binarny i plik dSYM aplikacji powodującej awarię.
Pliki binarne i pliki dSYM dla wszystkich niestandardowych środowisk, z którymi łączy się aplikacja. W środowiskach zbudowanych ze źródła z aplikacją ich pliki dSYM są kopiowane do archiwum wraz z plikiem dSYM aplikacji. W przypadku frameworków, które zostały zbudowane przez firmę zewnętrzną, będziesz musiał poprosić autora o plik dSYM.
Symbole dla systemu operacyjnego, na którym działała ta aplikacja po awarii. Te symbole zawierają informacje debugowania dla ram zawartych w określonej wersji systemu operacyjnego (np. IOS 9.3.3). Symbole systemu operacyjnego są specyficzne dla architektury - wersja iOS dla urządzeń 64-bitowych nie będzie zawierać symboli armv7. Xcode automatycznie skopiuje symbole systemu operacyjnego z każdego urządzenia podłączonego do komputera Mac.
Jeśli któregoś z nich brakuje, Xcode może nie być w stanie symbolizować raportu o awarii lub może tylko częściowo symbolizować raport o awarii.
źródło
Najłatwiejszy proces do symbolizowania dzienników awarii:
Poczekaj 5 sekund. Huk! wywołania aplikacji w śledzeniu stosu będą symbolizowane! Jednak nadal możesz zobaczyć wiele symboli! są to wywołania biblioteki wewnętrznej i frameworka.
Jest to najłatwiejszy, wypróbowany i przetestowany!
źródło
**
**
Będziemy mogli tam zobaczyć symboliczne dzienniki awarii
Zobacz link, aby uzyskać więcej informacji na temat symbolicznych dzienników awarii
źródło