Vom iPhone Simulator generierte Absturzprotokolle?


95

Gibt es Absturzprotokolle, die vom iPhone Simulator erstellt wurden?

Der Simulator stürzt häufig ab, hinterlässt jedoch keine Spuren in der Konsole. Das Absturzprotokoll ist hilfreich.


2
Ich verstehe nicht ganz, warum Sie die Absturzprotokolle benötigen. Wenn die App im Simulator abstürzt, aber bevor Sie das Debuggen beenden, geben Sie an der gdb-Eingabeaufforderung "bt" für "backtrace" ein - Sie erhalten genau das, was im Absturzprotokoll angezeigt wird. (wusste nicht, dass es hier Frage Nekromantie gab, verpasste das Postjahr)
Matthew Frederick

3
Wenn der Absturz nur auftrat, wenn Sie nicht vom Debugger angehängt wurden, benötigen Sie die Protokolle.
Ian1971

Du hast recht. das macht Sinn!
Raptor

Sie können das Debug-Protokoll (einschließlich der Ausgabe von lldb-Befehlen) auch im "Berichtsnavigator" in Xcode (cmd-8) anzeigen. Dies ist nützlich, um die Debug-Ausgabe auch für frühere Läufe anzuzeigen. Wenn der Debugger nicht angehängt war, funktioniert dies offensichtlich nicht.
Sebastien Martin

2
Das Debug-Protokoll ist nicht dasselbe wie das Absturzprotokoll, obwohl beide Protokolle zum Debuggen des Problems hilfreich sind.
Raptor

Antworten:


156

Die Konsole zeigt die NSLog()Ausgabe einer App an, die im Simulator ausgeführt wird. Die Absturzprotokolle werden in einer Datei gespeichert.

Ich habe einige in meinem Home-Verzeichnis unter gefunden

~/Library/Logs/DiagnosticReports/

Sie haben eine Dateierweiterung von .crash

Ich habe noch nicht herausgefunden, wie sie generiert werden können, selbst wenn der Debugger das EXC_BAD_ACCESSSignal erfasst .


Aktualisieren

Derzeit (OSX 10.11.6) meldet sich die .crash-Anmeldung an ~/Library/Logs/DiagnosticReports, wenn der Emulator selbst abstürzt . Protokolle für einen Absturz einer App (aber das Emulatorgerät läuft noch einwandfrei) befinden sich in:

~ / Library / Logs / CoreSimulator

Pro Absturz gibt es einen Unterordner mit einer eindeutigen ID. Nach Datum sortieren, sodass Ihr letzter Absturz der erste Unterordner ist. Beginnen Sie mit einem Blick auf stderr.logund system.log.

Auch direkt unter CoreSimulator, siehe CoreSimulator.logund Simulator.log.


Haben Sie eine Idee, warum diese Protokolle in eine Datei geschrieben werden, anstatt in der Konsole angezeigt zu werden? Danke übrigens für die Info.
Aqua

11
Keiner meiner Absturzberichte im iPhone- oder iPad-Simulator wird in diesem Verzeichnis angezeigt. Möglicherweise muss diese Antwort aktualisiert werden.
Justin

3
Vielleicht braucht es ein Update, aber eine Abwertung ist kein sehr höflicher Weg, um es zu fördern.
Ohhorob

2
Ich habe den Absturzbericht im genannten Verzeichnis gefunden, aber es gab nur einen Bericht und es war nicht der neueste (dh ich habe ein paar Dinge in der App ausprobiert und er stürzte immer wieder ab). Die Abstürze waren alle gleich, also war es kein Problem, aber ich frage mich, ob dies im Allgemeinen der Fall ist?
Samik R

10
Sowohl Justin als auch Ohhorob sind korrekt. Sie müssen die App auf dem Simulator OHNE Xcode starten und den Absturz reproduzieren, um die Anmeldungen zu sehen~/Library/Logs/DiagnosticReports/
Dave Chambers

20

Ich bin mir ziemlich sicher, dass Sie dies in der OS X Console-App unter Dienstprogramme sehen können. Wenn ich mich jedoch irre, stimmen Sie mich unbedingt ab, damit ich dies lösche.


AKTUALISIEREN:

Insbesondere (ab OSX 10.11.6),

Wenn eine App auf dem Emulator abstürzt, wird ein Unterordner (mit einer eindeutigen ID) hinzugefügt zu:

~ / Library / Logs / CoreSimulator

Beginnen Sie innerhalb von stderr.logund system.log.

Wenn der Emulator selbst abstürzt, wird ein Unterordner hinzugefügt zu:

~ / Library / Logs / DiagnosticReports

Verwechseln Sie diesen Weg nicht mit

/ Bibliothek / Protokolle

(fehlt ~am Anfang), die verschiedene Berichte über Ihren Mac enthält.



scheint, dass es nur für iPhone-Geräte gilt, anstatt für Simulator. Korrigieren Sie mich, wenn ich falsch liege.
Raptor

7
Die Konsole kann vom Simulator aus geöffnet werden, indem Sie Cmd- / drücken oder die Menüoption Debug / Open System Log ... verwenden.
Lambmj

5

Hier ist etwas, das in einem speziellen Fall für mich funktioniert hat ... Meine App stürzte mit SIGKILL ab, als sie beendet wurde. Ich würde die Ausnahme für ein paar Sekunden in main.m sehen, und dann würde die App beendet sein - also keine Chance, die Rückverfolgung zu erhalten.

Ich habe viel nach „Wo speichert der Simulator seine Absturzprotokolle?“ Gesucht und nie eine Antwort gefunden. Der folgende Trick war jedoch sehr praktisch und ich konnte das Absturzprotokoll sofort abrufen:

Öffnen Sie grundsätzlich /Applications/Utilities/CrashReporterPrefs.app und ändern Sie die Einstellung in "Developer". Dies führt dazu, dass CrashReporter nach dem Absturz Ihrer App ein Popup mit dem Absturzprotokoll anzeigt.

Ich habe dies im Abschnitt "Anzeigen der iOS-Simulatorkonsole und der Absturzprotokolle" in diesem Dokument von Apple gefunden: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application. html


Das ursprüngliche Problem mit SIGKILL, das ich untersucht habe, stellte sich übrigens
dana_a

Ich sollte darauf hinweisen, dass es in Application / Utilities keine CrashReporterPrefs-App gab, aber ich habe danach gesucht und konnte die App an anderer Stelle finden.
Justin

@ Justin wo hast du es gefunden?
Ohad Schneider

1
Beachten Sie, dass das oben genannte Tool von Xcode in einem Bundle mit dem Namen "Additional Tools for Xcode"
heruntergeladen werden kann.

1

Das ist viel zuverlässiger. In nur wenigen Schritten konnte ich die Quellzeilennummer und den Methodennamen finden:

  1. CD in das Verzeichnis mit den Dateien .app & .dSYM
  2. Führen Sie /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin MyApp.app/MyApp aus
  3. setze print asm-demangle auf
  4. Setzen Sie den Drucksymbol-Dateinamen auf
  5. p / a 0 × 00015c64 -> Adresse, die durch Öffnen des Absturzprotokolls in der App „Console“ oder durch Doppelklicken auf die Absturzdatei erhalten wurde.

3
Ich verstehe nicht ganz, warum Sie die Absturzprotokolle benötigen. Wenn die App im Simulator abstürzt, aber bevor Sie das Debuggen beenden, geben Sie an der gdb-Eingabeaufforderung "bt" für "backtrace" ein - Sie erhalten genau das, was im Absturzprotokoll angezeigt wird.
Matthew Frederick

Diese Methode eignet sich hervorragend für die Absturzprotokolle von Client-Telefonen.
Gamma-Punkt

1

Die Absturz-Absturzprotokolle werden unter ~ / Library / Logs / CrashReporter angezeigt.

  • Wenn das iPhone-Simulator-Programm abstürzt (nicht die iPhone-App, die im Simulator ausgeführt wird), wird ein Eintrag für iPhoneSimulator angezeigt.
  • Wenn die iPhone-App im Simulator abstürzt, wird das Absturzprotokoll mit dem Anzeigenamen der App angezeigt.

Wenn Xcode Absturzprotokolle von einem verbundenen Gerät erhält, werden diese in Unterordnern von ~ / Library / Logs / CrashReporter / MobileDevice gespeichert


Dies ist über ein Jahr später, aber ich sehe, dass die "App im Simulator" bei ~ / Library / Logs / DiagnosticReports abstürzt ... und es sieht so aus: MobileSafari_2013-03-21-155844_My-MacBook-Pro.crash
Rob

0

Für mich war es ein Ausdruck, den ich dem Debugger-Überwachungsfenster hinzugefügt hatte. Wenn ein Haltepunkt erreicht wurde, führte der schlechte Ausdruck dazu, dass XCode fehlerhaft wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.