449 Stimmen

Symbolisierung von iPhone App-Absturzmeldungen

Ich möchte versuchen, die Absturzberichte meiner iPhone-App zu symbolisieren.

Ich habe die Absturzberichte von iTunes Connect abgerufen. Ich habe die Programm-Binärdatei, die ich im App Store eingereicht habe, und ich habe die dSYM-Datei, die als Teil des Builds erstellt wurde.

Ich habe alle diese Dateien in einem einzigen Verzeichnis, das von Spotlight indiziert wird.

Was nun?

Ich habe versucht, sie aufzurufen:

symbolicatecrash crashreport.crash myApp.app.dSYM

und es wird einfach derselbe Text ausgegeben, der zu Beginn im Absturzbericht steht, nicht symbolisiert.

Mache ich etwas falsch?

698voto

Naveen Shan Punkte 9140

Schritte zum Analysieren des Absturzberichts von Apple:

  1. Kopieren Sie die Release-.app-Datei, die in den Appstore gestellt wurde, die .dSYM-Datei, die zum Zeitpunkt der Veröffentlichung erstellt wurde, und den von APPLE erhaltenen Absturzbericht in ein FOLDER .

  2. Öffnen Sie die Terminalanwendung und wechseln Sie in den oben erstellten Ordner (mit cd Befehl)

  3. Ejecutar atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH . Der Speicherort sollte derjenige sein, an dem die App laut Bericht abgestürzt ist.

Ex: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

Dies würde Ihnen die genaue Zeile und den Namen der Methode anzeigen, die zum Absturz geführt hat.

Ex: [classname functionName:]; -510

IPA symbolisieren

Wenn wir IPA für die Symbolisierung verwenden - benennen Sie einfach die Erweiterung .ipa in .zip um, entpacken Sie sie und Sie erhalten einen Nutzdatenordner, der die Anwendung enthält. In diesem Fall brauchen wir die .dSYM-Datei nicht.

Nota

Dies kann nur funktionieren, wenn in der App-Binärdatei keine Symbole entfernt wurden. Standardmäßig werden bei Release-Builds die Symbole entfernt. Wir können dies in den Projekt-Build-Einstellungen "Strip Debug Symbols During Copy" auf NO ändern.

Weitere Einzelheiten siehe hier Beitrag

178voto

Andreas Klöber Punkte 5736

Nachdem ich all diese Antworten hier gelesen habe, um ein Absturzprotokoll zu symbolisieren (und schließlich erfolgreich war), denke ich, dass hier einige Punkte fehlen, die wirklich wichtig sind, um festzustellen, warum der Aufruf von symbolicatecrash keine symbolisierte Ausgabe erzeugt.

Bei der Symbolisierung eines Absturzprotokolls müssen 3 Elemente zusammenpassen:

  1. Die Absturzprotokolldatei selbst (d. h. example.crash ), die entweder aus dem Organizer von XCode exportiert oder von iTunes Connect empfangen wurden.
  2. Le site .app Paket (d.h. example.app ), die ihrerseits die zum Absturzprotokoll gehörende App-Binärdatei enthält. Wenn Sie eine .ipa Paket (d.h. example.ipa ), dann können Sie die .app Paket durch Entpacken des .ipa Paket (d.h. unzip example.ipa ). Danach wird die .app Paket befindet sich in dem extrahierten Payload/ Ordner.
  3. Le site .dSYM Paket, das die Debugsymbole enthält (d. h. example.app.dSYM )

Bevor Sie mit der Symbolisierung beginnen, sollten Sie überprüfen, ob alle diese Artefakte übereinstimmen, d.h. ob das Absturzprotokoll zu der vorhandenen Binärdatei gehört und ob die Debugsymbole die sind, die während der Erstellung dieser Binärdatei erzeugt wurden.

Jede Binärdatei wird durch eine UUID referenziert, die in der Absturzprotokolldatei zu sehen ist:

...
Binary Images:
0xe1000 -    0x1f0fff +example armv7  <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff  dyld armv7s  <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...

In diesem Auszug gehört das Absturzprotokoll zu einem App-Binärabbild namens example.app/example mit der UUID aa5e633efda8346cab92b01320043dc3 .

Sie können die UUID des Binärpakets, das Sie haben, mit dwarfdump überprüfen:

dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example

Danach sollten Sie überprüfen, ob die Debugsymbole, die Sie haben, auch zu dieser Binärdatei gehören:

dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example

In diesem Beispiel passen alle Assets zusammen und Sie sollten in der Lage sein, Ihren Stacktrace zu symbolisieren.

Weiter geht es zum symbolicatecrash Drehbuch:

In Xcode 8.3 sollte es möglich sein, das Skript über

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log

Wenn sie nicht vorhanden ist, können Sie eine find . -name symbolicatecrash in Ihrem Xcode.app-Verzeichnis, um es zu finden.

Wie Sie sehen können, sind keine weiteren Parameter angegeben. Das Skript muss also die Binär- und Debugsymbole Ihrer Anwendung finden, indem es eine Spotlight-Suche durchführt. Es durchsucht die Debugsymbole mit einem bestimmten Index namens com_apple_xcode_dsym_uuids . Sie können diese Suche selbst durchführen:

mdfind 'com_apple_xcode_dsym_uuids = *'

bzw.

mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"

Der erste Spotlight-Aufruf liefert Ihnen alle indizierten dSYM-Pakete und der zweite liefert Ihnen die .dSYM Pakete mit einer bestimmten UUID. Wenn Spotlight Ihr Paket nicht findet .dSYM Paket dann symbolicatecrash wird auch nicht. Wenn Sie all diese Dinge z.B. in einem Unterordner Ihres ~/Desktop Spotlight sollte alles finden können.

Wenn symbolicatecrash findet Ihr .dSYM Paket sollte eine Zeile wie die folgende enthalten sein symbolicate.log :

@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )

Zum Auffinden Ihrer .app Paket wird eine Spotlight-Suche wie die folgende aufgerufen durch symbolicatecrash :

mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"

Wenn symbolicatecrash findet Ihr .app Paket sollte der folgende Auszug in symbolicate.log :

Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH

Wenn alle diese Ressourcen gefunden werden durch symbolicatecrash sollte es die symbolisierte Version Ihres Absturzprotokolls ausdrucken.

Andernfalls können Sie Ihre dSYM- und .app-Dateien direkt einreichen.

symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log

Anmerkung: Der symbolisierte Backtrace wird auf dem Terminal ausgegeben, nicht symbolicate.log .

115voto

Alan Rogers Punkte 14958

Mit der neuesten Version von Xcode (3.2.2) können Sie alle Absturzberichte per Drag & Drop in den Abschnitt "Geräteprotokolle" des Xcode Organizers ziehen, und sie werden automatisch für Sie symbolisiert. Ich denke, dies funktioniert am besten, wenn Sie diese Version der App mit Build & Archive (auch Teil von Xcode 3.2.2) gebaut

75voto

SachinVsSachin Punkte 6312

Dies ist mir mit den folgenden Schritten gelungen.

Schritt 1: Erstellen Sie einen Ordner auf dem Desktop, ich nenne ihn "CrashReport" und lege drei Dateien ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash") darin ab.

Schritt 2: Öffnen Sie den Finder und gehen Sie zu Anwendungen, wo Sie die Xcode-Anwendung finden, klicken Sie mit der rechten Maustaste darauf und klicken Sie auf "Paketinhalt anzeigen", danach folgen Sie diesem einfachen Pfad. "Inhalt->Entwickler->Plattformen->iPhoneOS.platform->Entwickler->Bibliothek->PrivateFrameworks-> DTDeviceKit.framework ->Versionen->A->Ressourcen"

OR

"Inhalt->Entwickler->Plattformen->iPhoneOS.platform->Entwickler->Bibliothek->PrivateFrameworks-> DTDeviceKitBase.framework ->Versionen->A->Ressourcen"

OR

Für Xcode 6 und höher lautet der Pfad Anwendungen/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versionen/A/Resources

Kopieren Sie die Datei "symbolicatecrash", und fügen Sie sie in den Ordner "CrashReport" ein.

Schritt 3: Starten Sie das Terminal und führen Sie diese 3 Befehle aus

  1. cd /Users/mac38/Desktop/CrashReport und drücken Sie die Eingabetaste

  2. export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" und drücken Sie Enter

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM und drücken Sie die Eingabetaste Jetzt ist es fertig (HINWEIS: Versionen um 6.4 oder später haben die Option -A nicht - lassen Sie sie einfach weg).

37voto

William Entriken Punkte 33360

Schritte zum automatischen Symbolisieren eines Absturzberichts mit XCode:

AKTUALISIERT FÜR XCODE 9

  1. Verbinden Sie jede iOS-Gerät an den Mac anschließen (ja, ein physisches Gerät, ja, ich weiß, das ist blöd)

  2. Wählen Sie "Geräte" aus dem Menü "Fenster". enter image description here

  3. Klicken Sie auf der linken Seite auf Ihr Gerät und auf der rechten Seite auf GERÄTEPROTOKOLLE ANSEHEN enter image description here

  4. Warten Sie. Es könnte eine Minute dauern, bis es erscheint. Vielleicht tun Command-A entonces Delete wird dies beschleunigen.

  5. Kritischer undokumentierter Schritt: Benennen Sie den Absturzbericht, den Sie von iTunesConnect erhalten haben, um in .txt Erweiterung auf .crash Erweiterung

  6. Ziehen Sie den Absturzbericht in den Bereich auf der linken Seite. enter image description here

Und dann symbolisiert Xcode den Absturzbericht und zeigt die Ergebnisse an.

Quelle: https://developer.apple.com/library/ios/technotes/tn2151/_index.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X