Dzienniki awarii generowane przez iPhone Simulator?


97

Czy są jakieś dzienniki awarii generowane przez iPhone Simulator?

Symulator dużo się zawiesza, ale nie pozostawia żadnych śladów w Konsoli ... Dziennik awarii będzie przydatny.


2
Nie bardzo rozumiem, dlaczego potrzebujesz dzienników awarii. Gdy aplikacja w symulatorze ulegnie awarii, ale przed zatrzymaniem debugowania, w wierszu polecenia gdb wpisz „bt” zamiast „backtrace” - otrzymasz dokładnie to, co pojawi się w dzienniku awarii. (nie zdawałem sobie sprawy, że jest tu kwestia nekromancji, przegapiłem rok pocztowy)
Matthew Frederick

3
Jeśli awaria wystąpiła tylko wtedy, gdy debugger nie był dołączony, będziesz potrzebować dzienników.
Ian1971

masz rację. to ma sens!
Raptor

Możesz również zobaczyć dziennik debugowania (w tym dane wyjściowe poleceń lldb) w „Nawigatorze raportów” w Xcode (cmd-8). Jest to przydatne do przeglądania wyników debugowania dla poprzednich uruchomień. Jeśli debugger nie został dołączony, to oczywiście nie zadziała.
Sebastien Martin

2
Dziennik debugowania nie jest tym samym, co dziennik awarii, chociaż oba dzienniki są przydatne do debugowania problemu.
Raptor

Odpowiedzi:


159

Konsola pokaże dane NSLog()wyjściowe z aplikacji uruchomionej w symulatorze. Dzienniki awarii są zapisywane w pliku.

Znalazłem kilka w moim katalogu domowym pod

~/Library/Logs/DiagnosticReports/

Mają rozszerzenie pliku .crash

Coś, czego jeszcze nie odkryłem, to jak zmusić je do wygenerowania, nawet jeśli debugger przechwyci EXC_BAD_ACCESSsygnał.


Aktualizacja

Obecnie (OSX 10.11.6) .crash loguje się ~/Library/Logs/DiagnosticReports, gdy sam emulator ulega awarii . Dzienniki awarii aplikacji (ale urządzenie emulatora nadal działa poprawnie) znajdują się w:

~ / Library / Logs / CoreSimulator

W przypadku każdej awarii istnieje podfolder z unikalnym identyfikatorem. Sortuj według daty, tak aby ostatnia awaria była pierwszym podfolderem. Wewnątrz zacznij od spojrzenia na stderr.logi system.log.

Również bezpośrednio pod CoreSimulator, patrz CoreSimulator.logi Simulator.log.


Masz jakiś pomysł, dlaczego te dzienniki są zapisywane do pliku zamiast pojawiać się w konsoli? Przy okazji dzięki za informację.
aqua

11
Żaden z moich raportów o awariach w symulatorze iPhone'a lub iPada nie pojawia się w tym katalogu, może ta odpowiedź wymaga aktualizacji?
Justin

3
Być może wymaga aktualizacji, ale głosowanie negatywne nie jest zbyt uprzejmym sposobem na zachęcenie do tego.
ohhorob

2
Znalazłem raport o awarii we wspomnianym katalogu, ale był tylko jeden raport i nie był to najnowszy (tj. Próbowałem kilku rzeczy w aplikacji i ciągle się zawieszała). Wszystkie awarie były takie same, więc to nie był problem, ale zastanawiam się, czy tak jest ogólnie?
Samik R

10
Justin i Ohhorob mają rację. Musisz uruchomić aplikację na symulatorze BEZ Xcode i odtworzyć awarię, aby zobaczyć logi~/Library/Logs/DiagnosticReports/
Dave Chambers

20

Jestem prawie pewien, że widać to w aplikacji OS X Console znajdującej się w Utilities. Jeśli się mylę, pamiętaj, aby zagłosować na mnie, więc usunę to.


AKTUALIZACJA:

W szczególności (od OSX 10.11.6),

Kiedy aplikacja ulega awarii na emulatorze, podfolder (z unikalnym identyfikatorem) jest dodawany do:

~ / Library / Logs / CoreSimulator

W ramach tego zacznij od zbadania stderr.logi system.log.

Kiedy sam emulator ulega awarii, podfolder jest dodawany do:

~ / Library / Logs / DiagnosticReports

Nie myl tej ścieżki z

/ Library / Logs

(brak ~na początku), który zawiera różne raporty na temat twojego komputera Mac.



wydaje się, że dotyczy to tylko urządzeń iPhone, a nie symulatora. Popraw mnie, jeśli się mylę.
Raptor

7
Konsolę można otworzyć z symulatora naciskając Cmd- / lub używając opcji menu Debug / Open System Log….
lambmj

5

Oto coś, co zadziałało w moim przypadku w szczególnym przypadku ... Moja aplikacja ulegała awarii z SIGKILL podczas zamykania. Widziałbym wyjątek w main.m przez kilka sekund, a następnie aplikacja kończyłaby pracę - w ten sposób nie ma szans na uzyskanie wstecznego śledzenia.

Dużo szukałem informacji „gdzie symulator przechowuje swoje dzienniki awarii” i nigdy nie udało mi się znaleźć odpowiedzi. Jednak następująca sztuczka okazała się całkiem przydatna i mogłem pobrać dziennik awarii w locie:

Zasadniczo otwórz /Applications/Utilities/CrashReporterPrefs.app i zmień ustawienie na „Developer”. Spowoduje to, że CrashReporter wyświetli wyskakujące okienko z dziennikiem awarii po awarii aplikacji.

Znalazłem to w sekcji „Wyświetlanie konsoli symulatora iOS i dzienników awarii” w tym dokumencie firmy Apple: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application. html


Nawiasem mówiąc, pierwotny problem z SIGKILLem, który badałem, nie był problemem: stackoverflow.com/questions/7901262/ ...
dana_a

Powinienem zaznaczyć, że w Application / Utilities nie było aplikacji CrashReporterPrefs, jednak szukałem jej i mogłem znaleźć aplikację gdzie indziej.
Justin

@Justin, gdzie to znalazłeś?
Ohad Schneider

1
Zauważ, że narzędzie, o którym mowa powyżej, można pobrać z Xcode w pakiecie o nazwie „Dodatkowe narzędzia dla Xcode” developer.apple.com/download/more/ ...
markshiz

1

Jest to znacznie bardziej niezawodne. W zaledwie kilku krokach udało mi się znaleźć numer linii źródłowej i nazwę metody:

  1. cd do katalogu zawierającego pliki .app i .dSYM
  2. run /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin MyApp.app/MyApp
  3. włącz print asm-demangle
  4. włącz opcję drukowania nazwy pliku z symbolem
  5. p / a 0 × 00015c64 -> adres uzyskany po otwarciu dziennika awarii w aplikacji „Konsola” lub po dwukrotnym kliknięciu pliku .crash.

3
Nie bardzo rozumiem, dlaczego potrzebujesz dzienników awarii. Gdy aplikacja w symulatorze ulegnie awarii, ale przed zatrzymaniem debugowania, w wierszu polecenia gdb wpisz „bt” zamiast „backtrace” - otrzymasz dokładnie to, co pojawi się w dzienniku awarii.
Matthew Frederick

Ta metoda doskonale sprawdza się w przypadku dzienników awarii z telefonów klienckich.
Punkt gamma,

1

Dzienniki awarii pojawią się w ~ / Library / Logs / CrashReporter.

  • Jeśli program symulatora iPhone'a ulegnie awarii (a nie aplikacja iPhone działająca w symulatorze), pojawi się wpis dla iPhoneSimulator.
  • Jeśli aplikacja iPhone w symulatorze ulegnie awarii, dziennik awarii zostanie wyświetlony z wyświetlaną nazwą aplikacji.

Gdy Xcode pobiera dzienniki awarii z podłączonego urządzenia, przechowuje je w podfolderach ~ / Library / Logs / CrashReporter / MobileDevice


To jest ponad rok później, ale widzę awarię „aplikacji w symulatorze” w ~ / Library / Logs / DiagnosticReports ... i wygląda tak: MobileSafari_2013-03-21-155844_My-MacBook-Pro.crash
Rob

0

Dla mnie było to wyrażenie, które dodałem do okna obserwacyjnego debugera. Kiedy punkt przerwania był trafiony, złe wyrażenie powodowało segfault XCode.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.