Der Xcode 5-Organizer hatte eine Ansicht, in der alle Absturzprotokolle aufgelistet waren. und wir könnten Drop-Crash-Protokolle hierher ziehen. Aber seit Xcode 6 weiß ich, dass sie Geräte aus der Organisation verschoben haben und ein neues Fenster dafür haben. Aber ich finde keinen Ort, an dem ich die Absturzprotokolle ansehe, die ich in Xcode 5 gezogen habe, nachdem ich auf Xcode 6 erhöht habe. Kennt jemand die Antwort?
188
Antworten:
Ok, mir wurde klar, dass du das kannst:
Xcode > Window > Devices
Wählen Sie einen angeschlossenen iPhone / iPad / etc links oben.Sie haben dort wahrscheinlich viele Protokolle, und um das spätere Auffinden Ihres importierten Protokolls zu vereinfachen, können Sie an dieser Stelle einfach alle Protokolle löschen ... es sei denn, sie bedeuten Ihnen Geld. Oder es sei denn, Sie wissen genau, wann der Absturz passiert ist - er sollte trotzdem in die Datei geschrieben werden ... Ich bin faul, also lösche ich einfach alle alten Protokolle (dies hat tatsächlich eine Weile gedauert).
quelle
.crash
.Schreiben Sie diese Antwort sowohl für die Community als auch für mich.
Wenn es jemals Probleme gibt, die einen Absturzbericht symbolisieren, können Sie diese wie folgt beheben:
Erstellen Sie einen separaten Ordner, kopieren Sie
Foo.app
undFoo.app.dSYM
aus dem entsprechenden.xcarchive
in den Ordner. Kopieren Sie den.crash
Bericht auch in den Ordner.Öffnen Sie den Absturzbericht in TextEdit oder anderswo, gehen Sie zum
Binary Images:
Abschnitt und kopieren Sie dort die erste Adresse (z0xd7000
. ).cd
in den Ordner. Jetzt können Sie den folgenden Befehl ausführen:xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb
Dies symbolisiert das Symbol an der Adresse
0x0033f9bb
. Bitte stellen Sie sicher, dass Sie den richtigen Wert für die-arch
Option auswählen (kann aus der ersten Zeile in der abgerufen werdenBinary Images:
Abschnitts oderHardware Model:
und in den von der App unterstützten Bögen ermittelt werden).Sie können auch die erforderlichen Adressen (z. B. einen Thread-Aufrufstapel) aus dem Absturzbericht direkt in eine Textdatei kopieren (in TextEdit Option gedrückt halten und den erforderlichen Textblock auswählen oder kopieren und ausschneiden), um Folgendes zu erhalten:
Jetzt können Sie dies in einer Textdatei speichern, z
addr.txt
und den folgenden Befehl ausführen:Dies gibt eine schöne Symbolisierung für alle Adressen gleichzeitig.
PS
Bevor Sie dies tun, sollten Sie überprüfen, ob alles korrekt eingerichtet ist (as
atos
gerne etwas für praktisch jede angegebene Adresse melden).Öffnen Sie zur Überprüfung den Absturzbericht und gehen Sie zum Ende des Aufrufstapels für
Thread 0
. Die erste Zeile vom Ende, um Ihre App aufzulisten (normalerweise die zweite), z.sollte der
main()
Anruf sein. Das Symbolisieren der Adresse (0x0033f9bb
in diesem Fall) wie oben beschrieben sollte bestätigen, dass dies tatsächlichmain()
eine zufällige Methode oder Funktion ist und nicht.Wenn die Adresse nicht die von ist
main()
, überprüfen Sie Ihre Ladeadresse (-l
Option) und Ihren Bogen (-arch
Option).PPS
Wenn das oben genannte aufgrund von Bitcode nicht funktioniert , laden Sie das dSYM für Ihren Build von iTunes Connect herunter, extrahieren Sie die ausführbare Binärdatei aus dem dSYM (Finder> Paketinhalt anzeigen), kopieren Sie sie in das Verzeichnis und verwenden Sie sie (dh
Foo
) als Argument zuatos
, anstelle derFoo.app/Foo
.quelle
xcrun dwarfdump --uuid <path to executable>
./symbolicate.sh mycrash.crash MyApp.app arch64 output.crash
Nur es symbolisiert den vollständigen Absturzbericht und gibt Ihnen die symbolisierte Version davon. gist.github.com/nathan-fiscaletti/…Sie können auch auf diese verweisen, ich habe Schritt für Schritt Verfahren von geschrieben Anleitung manuellen Crash-Re-Symbolisierung geschrieben.
Absturz-Re-Symbolisierung
SCHRITT 1
Verschieben Sie alle oben genannten Dateien (MyApp.app, MyApp-dSYM.dSYM und MyApp-Crash-log.crash) in einen Ordner mit einem geeigneten Namen, wo immer Sie Terminal problemlos verwenden können.
Für mich ist Desktop der am leichtesten erreichbare Ort;) Also habe ich diese drei Dateien in einen Ordner MyApp at Desktop verschoben.
SCHRITT 2
Jetzt ist Finder an der Reihe. Wechseln Sie zu dem Pfad, der für Ihre XCODE-Version gilt.
Verwenden Sie diesen Befehl, um die
symbolicatecrash
Skriptdatei zu finden .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
Senken Sie dann Xcode 6
Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Oder
Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
SCHRITT 3
Fügen Sie das Verzeichnis der gefundenen symbolicatecrash-Skriptdatei wie
$PATH
folgt zur env-Variablen hinzu: Fügen Sie das Verzeichnissudo vim /etc/paths.d/Xcode-symbolicatecrash
der Skriptdatei ein und speichern Sie die Datei. Wenn Sie ein neues Terminal öffnen, können Sie anrufensymbolicatecrash
beliebigen Ordner als Befehle in/usr/bin
.Oder
Kopieren Sie die symbolicatecrash-Datei von diesem Speicherort und fügen Sie sie in den Desktop / MyApp ein (Warten Sie ... Folgen Sie mir nicht blindlings. Ich füge die sybolicatecrash-Datei in den Ordner MyApp ein, den Sie in Schritt 1 an Ihrem bevorzugten Speicherort erstellt haben und der drei Dateien enthält. )
SCHRITT 4
Öffnen Sie das Terminal und legen Sie die CD in den MyApp-Ordner.
- Drücken Sie die Eingabetaste
- Drücken Sie die Eingabetaste
Das ist es !! Symbolisierte Protokolle befinden sich auf Ihrem Terminal. Worauf warten Sie jetzt noch? Finden Sie jetzt einfach den Fehler heraus und beheben Sie ihn;)
Viel Spaß beim Codieren !!!
quelle
xcode-select --print-path
Für mich war die .crash-Datei genug. Ohne .dSYM-Datei und .app-Datei.
Ich habe diese beiden Befehle auf dem Mac ausgeführt, auf dem ich das Archiv erstellt habe, und es hat funktioniert:
quelle
Es gibt eine einfachere Möglichkeit, Xcode zu verwenden (ohne Befehlszeilentools zu verwenden und Adressen einzeln nachzuschlagen).
Nehmen Sie eine beliebige .xcarchive-Datei. Wenn Sie eine von zuvor haben, können Sie diese verwenden. Wenn Sie noch keine haben, erstellen Sie eine, indem Sie Produkt> Archiv von Xcode aus ausführen.
Klicken Sie mit der rechten Maustaste auf die .xcarchive-Datei und wählen Sie "Paketinhalt anzeigen".
Kopieren Sie die dsym-Datei (der Version der App, die abgestürzt ist) in den Ordner dSYMs
Kopieren Sie die AP-Datei (der abgestürzten Version der App) in den Ordner Produkte> Anwendungen
Bearbeiten Sie die Info.plist und den CFBundleShortVersionString und die CFBundleVersion im ApplicationProperties-Wörterbuch. Auf diese Weise können Sie das Archiv später identifizieren
Doppelklicken Sie auf das .xcarchive, um es in Xcode zu importieren. Es sollte Organizer öffnen.
Gehen Sie zurück zum Absturzprotokoll (im Gerätefenster in Xcode).
Ziehen Sie Ihre .crash-Datei dorthin (falls nicht bereits vorhanden).
Das gesamte Absturzprotokoll sollte jetzt symbolisiert werden. Wenn nicht, klicken Sie mit der rechten Maustaste und wählen Sie "Absturzprotokoll erneut symbolisieren".
quelle
Führen Sie die folgenden Schritte in Xcode 10 aus, um ein Absturzprotokoll einer App zu symbolisieren, die auf demselben Computer erstellt wurde:
quelle
Wenn Sie die .dSYM- und die .crash-Datei im selben Unterordner haben, können Sie folgende Schritte ausführen:
$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc -[AtomicElementViewController myTransitionDidStop:finished:context:]
Autorisierende Quelle: https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS
quelle
Stellen Sie sicher, dass der Name Ihrer Xcode-Anwendung keine Leerzeichen enthält. Dies war der Grund, warum es bei mir nicht funktioniert hat. Funktioniert also,
/Applications/Xcode.app
funktioniert/Applications/Xcode 6.1.1.app
aber nicht.quelle
Xcode 11.2.1, Dezember 2019
** **.
** **.
Dort können wir symbolisierte Absturzprotokolle sehen
Weitere Informationen zum Symbolisieren von Absturzprotokollen finden Sie unter dem Link
quelle
Aus Apples Dokumenten:
Absturzberichte symbolisieren Mit Xcode Xcode versucht automatisch, alle aufgetretenen Absturzberichte zu symbolisieren. Zur Symbolisierung müssen Sie lediglich den Absturzbericht zum Xcode Organizer hinzufügen.
Xcode symbolisiert automatisch den Absturzbericht und zeigt die Ergebnisse an. Um einen Absturzbericht zu symbolisieren, muss Xcode in der Lage sein, Folgendes zu finden:
Die Binär- und dSYM-Datei der abstürzenden Anwendung.
Die Binärdateien und dSYM-Dateien für alle benutzerdefinierten Frameworks, mit denen die Anwendung verknüpft ist. Bei Frameworks, die mit der Anwendung aus dem Quellcode erstellt wurden, werden ihre dSYM-Dateien zusammen mit der dSYM-Datei der Anwendung in das Archiv kopiert. Bei Frameworks, die von einem Drittanbieter erstellt wurden, müssen Sie den Autor nach der dSYM-Datei fragen.
Symbole für das Betriebssystem, auf dem diese Anwendung beim Absturz ausgeführt wurde. Diese Symbole enthalten Debug-Informationen für die Frameworks, die in einer bestimmten Betriebssystemversion enthalten sind (z. B. iOS 9.3.3). Betriebssystemsymbole sind architekturspezifisch - eine Version von iOS für 64-Bit-Geräte enthält keine armv7-Symbole. Xcode kopiert automatisch Betriebssystemsymbole von jedem Gerät, das Sie mit Ihrem Mac verbinden.
Wenn eines dieser Elemente fehlt, kann Xcode den Absturzbericht möglicherweise nicht oder nur teilweise symbolisieren.
quelle
Der einfachste Prozess zum Symbolisieren von Absturzprotokollen:
Warten Sie 5 Sekunden. Knall! Die Anwendungsaufrufe im Stack-Trace werden symbolisiert! Möglicherweise sehen Sie dennoch viele Symbole! Dies sind interne Bibliotheks- und Framework-Aufrufe.
Dies ist die einfachste, bewährte!
quelle
** **.
** **.
Dort können wir symbolisierte Absturzprotokolle sehen
Weitere Informationen zum Symbolisieren von Absturzprotokollen finden Sie unter dem Link
quelle