Ich möchte versuchen, die Absturzberichte meiner iPhone-App zu symbolisieren.
Ich habe die Absturzberichte von iTunes Connect abgerufen. Ich habe die Anwendungsbinärdatei, die ich an den App Store gesendet habe, und ich habe die dSYM-Datei, die als Teil des Builds generiert wurde.
Ich habe alle diese Dateien zusammen in einem einzigen Verzeichnis, das durch Spotlight indiziert wird.
Was jetzt?
Ich habe versucht, Folgendes aufzurufen:
symbolicatecrash crashreport.crash myApp.app.dSYM
und es wird nur derselbe Text ausgegeben, der zu Beginn im Absturzbericht enthalten ist, nicht symbolisiert.
Mache ich etwas falsch?
ios
crash-reports
symbolicate
Jasarien
quelle
quelle
symbolicatecrash
Befehl zu finden ist , wie er zu verwenden ist und wie die für die Symbolisierung erforderliche dSYM-Datei zu finden ist.Antworten:
Schritte zum Analysieren des Absturzberichts von Apple:
Kopieren Sie die .app-App-Datei, die in den Appstore verschoben wurde, die zum Zeitpunkt der Veröffentlichung erstellte .dSYM-Datei und den von APPLE empfangenen Absturzbericht in einen ORDNER .
Öffnen Sie die Terminalanwendung und wechseln Sie in den oben erstellten Ordner (mit dem
cd
Befehl).Ausführen
atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH
. Der Speicherort sollte derjenige sein, an dem die App gemäß dem Bericht abgestürzt ist.Ex:
atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
Dies würde Ihnen die genaue Zeile und den Methodennamen anzeigen, die zum Absturz geführt haben.
Ex:
[classname functionName:]; -510
IPA symbolisieren
Wenn wir IPA zum Symbolisieren verwenden - benennen Sie einfach die Erweiterung .ipa mit .zip um, extrahieren Sie sie, dann können wir einen Payload-Ordner erhalten, der eine App enthält. In diesem Fall benötigen wir keine .dSYM-Datei.
Hinweis
Dies kann nur funktionieren, wenn in der App-Binärdatei keine Symbole entfernt wurden. Standardmäßig haben Release-Builds die Symbole entfernt. Wir können es in den Projekterstellungseinstellungen "Debug-Symbole während des Kopierens entfernen" auf NEIN ändern.
Weitere Details finden Sie in diesem Beitrag
quelle
atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c
aus der-[HUDWindow sizedHUDBackground] (in myApp) + 1197
Nachdem ich all diese Antworten hier gelesen habe, um ein Absturzprotokoll zu symbolisieren (und schließlich erfolgreich zu sein), denke ich, dass hier einige Punkte fehlen, die wirklich wichtig sind, um festzustellen, warum der Aufruf von symbolicatecrash keine symbolisierte Ausgabe erzeugt.
Es gibt 3 Assets, die zusammenpassen müssen, wenn ein Absturzprotokoll symbolisiert wird:
example.crash
), die entweder aus dem Organizer von XCode exportiert oder von iTunes Connect empfangen wurde..app
Paket (dhexample.app
), das selbst die zum Absturzprotokoll gehörende App-Binärdatei enthält. Wenn Sie ein.ipa
Paket (dhexample.ipa
) haben, können Sie das.app
Paket extrahieren , indem Sie das.ipa
Paket (dhunzip example.ipa
) entpacken . Danach befindet sich das.app
Paket im extrahiertenPayload/
Ordner..dSYM
Paket mit den Debug-Symbolen (dhexample.app.dSYM
)Bevor Sie mit der Symbolisierung beginnen, sollten Sie überprüfen, ob alle diese Artefakte übereinstimmen. Dies bedeutet, dass das Absturzprotokoll zu Ihrer Binärdatei gehört und dass die Debug-Symbole diejenigen sind, die während der Erstellung dieser Binärdatei erstellt wurden.
Jede Binärdatei wird von einer UUID referenziert, die in der Absturzprotokolldatei angezeigt wird:
In diesem Auszug gehört das Absturzprotokoll zu einem App-Binärbild mit dem Namen example.app/example mit UUID
aa5e633efda8346cab92b01320043dc3
.Sie können die UUID des Binärpakets, das Sie haben, mit dwarfdump überprüfen:
Anschließend sollten Sie überprüfen, ob die Debug-Symbole, die Sie haben, auch zu dieser Binärdatei gehören:
In diesem Beispiel passen alle Assets zusammen und Sie sollten in der Lage sein, Ihre Stacktrace zu symbolisieren.
Fahren Sie mit dem
symbolicatecrash
Skript fort:In Xcode 8.3 sollten Sie das Skript über aufrufen können
Wenn es nicht vorhanden ist, können Sie ein
find . -name symbolicatecrash
in Ihrem Xcode.app-Verzeichnis ausführen, um es zu finden.Wie Sie sehen, sind keine Parameter mehr angegeben. Das Skript muss also die Binär- und Debug-Symbole Ihrer Anwendung finden, indem eine Spotlight-Suche ausgeführt wird. Es durchsucht die Debug-Symbole mit einem bestimmten Index namens
com_apple_xcode_dsym_uuids
. Sie können diese Suche selbst durchführen:bzw.
Der erste Spotlight-Aufruf gibt Ihnen alle indizierten dSYM-Pakete und der zweite die
.dSYM
Pakete mit einer bestimmten UUID. Wenn Spotlight Ihr.dSYM
Paket nicht findet ,symbolicatecrash
wird es auch nicht. Wenn Sie all diese Dinge tun, z. B. in einem Unterordner Ihres~/Desktop
Scheinwerfers, sollten Sie in der Lage sein, alles zu finden.Wenn
symbolicatecrash
Ihr.dSYM
Paket gefunden wird, sollte eine Zeile wie die folgende in angezeigt werdensymbolicate.log
:Um Ihr
.app
Paket zu finden, wird eine Spotlight-Suche wie die folgende aufgerufensymbolicatecrash
:Wenn
symbolicatecrash
Ihr.app
Paket gefunden wird, sollte der folgende Auszug enthalten seinsymbolicate.log
:Wenn alle diese Ressourcen gefunden werden
symbolicatecrash
, sollte die symbolisierte Version Ihres Absturzprotokolls ausgedruckt werden.Wenn nicht, können Sie Ihre dSYM- und .app-Dateien direkt übergeben.
Hinweis: Die symbolisierte Rückverfolgung wird nicht an das Terminal ausgegeben
symbolicate.log
.quelle
No crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
DEVELOPER_DIR
Umgebungsvariable festlegen müssen, wenn sich das Skript wie folgt darüber beschwert :export DEVELOPER_DIR=`xcode-select --print-path`
. Ich habe diese Zeile zu meiner hinzugefügt~/.bash_profile
. Siehe stackoverflow.com/q/11682789/350761<SYMBOL_PATH> Additional search paths in which to search for symbol rich binaries
-o | --output <OUTPUT_FILE> The symbolicated log will be written to OUTPUT_FILE. Defaults to "-" (i.e. stdout) if not specified
-d | --dsym <DSYM_BUNDLE> Adds additional dSYM that will be consulted if and when a binary's UUID matches (may be specified more than once)
Mit der neuesten Version von Xcode (3.2.2) können Sie Absturzberichte per Drag & Drop in den Abschnitt Geräteprotokolle des Xcode Organizers ziehen und sie werden automatisch für Sie symbolisiert. Ich denke, das funktioniert am besten, wenn Sie diese Version der App mit Build & Archive (ebenfalls Teil von Xcode 3.2.2) erstellt haben.
quelle
Ich habe dies erfolgreich mit den folgenden Schritten durchgeführt.
Schritt 1: Erstellen Sie einen Ordner auf dem Desktop, geben Sie "CrashReport" den Namen und legen Sie 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". Folgen Sie anschließend diesem einfachen Pfad. "Inhalt-> Entwickler-> Plattformen-> iPhoneOS.platform-> Entwickler-> Bibliothek-> PrivateFrameworks-> DTDeviceKit.framework -> Versionen-> A-> Ressourcen"
ODER
"Inhalt-> Entwickler-> Plattformen-> iPhoneOS.platform-> Entwickler-> Bibliothek-> PrivateFrameworks-> DTDeviceKitBase.framework -> Versionen-> A-> Ressourcen"
ODER
Für Xcode 6 und höher lautet der Pfad Applications / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Versions / A / Resources
Wenn Sie die Datei "symbolicatecrash" finden, kopieren Sie diese und fügen Sie sie in den Ordner "CrashReport" ein.
Schritt 3: Starten Sie das Terminal und führen Sie diese 3 Befehle aus
cd / Users / mac38 / Desktop / CrashReport und drücken Sie die Eingabetaste
exportiere DEVELOPER_DIR = "/ Applications / Xcode.app / Contents / Developer" und drücke die Eingabetaste
quelle
Unknown option: A
für symbolicatecrash bekam , aber der Prozess lief trotzdemSchritte zum automatischen Symbolisieren eines Absturzberichts mit XCode:
AKTUALISIERT FÜR XCODE 9
Verbinden Sie jedes iOS-Gerät mit Ihrem Mac (ja, ein physisches, ja, ich weiß, das ist dumm)
Wählen Sie "Geräte" aus dem Menü "Fenster"
Klicken Sie links auf Ihr Gerät und rechts auf VIEW DEVICE LOGS
Warten. Es kann eine Minute dauern, bis es angezeigt wird. Vielleicht tun
Command-A
dannDelete
wird dies beschleunigen.Kritischer undokumentierter Schritt: Benennen Sie den Absturzbericht, den Sie von iTunesConnect erhalten haben, von
.txt
Erweiterung zu.crash
Erweiterung umZiehen Sie den Absturzbericht in diesen Bereich links
Und dann symbolisiert Xcode den Absturzbericht und zeigt die Ergebnisse an.
Quelle: https://developer.apple.com/library/ios/technotes/tn2151/_index.html
quelle
Ich verwende Airbrake in meinen Apps, die die Remote-Fehlerprotokollierung recht gut erledigen.
So symbolisiere ich sie mit atos, wenn der Backtrace es braucht:
Gehen Sie in Xcode (4.2) zum Organizer und klicken Sie mit der rechten Maustaste auf das Archiv, aus dem die IPA-Datei generiert wurde.
CD in Terminal zum Beispiel in das xcarchive
MyCoolApp 10-27-11 1.30 PM.xcarchive
Geben Sie Folgendes ein
atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp'
(vergessen Sie nicht die einfachen Anführungszeichen)Ich füge mein Symbol nicht in diesen Anruf ein. Was Sie erhalten, ist ein Blockcursor in einer leeren Zeile.
Dann kopiere ich meinen Symbolcode an diesem Blockcursor und drücke die Eingabetaste. Sie werden so etwas sehen wie:
-[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)
Sie kehren zu einem Blockcursor zurück und können andere Symbole einfügen.
Es ist eine schöne Zeitersparnis, einen Gegenstand durchgehen zu können, ohne das erste Bit erneut einzugeben.
Genießen!
quelle
Ich habe auch dsym, das App-Bundle und das Absturzprotokoll im selben Verzeichnis zusammengefasst, bevor ich den symbolischen Absturz ausführe
Dann verwende ich diese in meinem .profile definierte Funktion, um das Ausführen von symbolicatecrash zu vereinfachen:
Die dort hinzugefügten Argumente können Ihnen helfen.
Sie können überprüfen, ob Spotlight Ihre Dysm-Dateien "sieht", indem Sie den folgenden Befehl ausführen:
Suchen Sie nach dem dsym, das Sie in Ihrem Verzeichnis haben.
HINWEIS: Ab dem neuesten Xcode gibt es kein Entwicklerverzeichnis mehr. Sie finden dieses Dienstprogramm hier:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versionen / A / Resources / symbolicatecrash
quelle
Nur eine einfache und aktualisierte Antwort für xcode 6.1.1.
SCHRITTE
1.Xcode> Fenster> Geräte.
2.Wählen Sie ein Gerät aus einer Liste von Geräten im Abschnitt GERÄTE aus.
3.Wählen Sie Geräteprotokolle anzeigen.
4. Im Abschnitt Alle Protokolle können Sie die Datei report.crash direkt ziehen
5.Xcode symbolisiert automatisch den Absturzbericht für Sie.
6.Sie können den symbolisierten Absturzbericht finden, indem Sie Datum / Uhrzeit mit dem in Ihrem Absturzbericht angegebenen Datum / Uhrzeit abgleichen.
quelle
Obwohl ich seit einigen Jahren Apps entwickle, war dies das erste Mal, dass ich eine Binärdatei debuggte, und ich fühlte mich wie ein kompletter NOOB, der herausfand, wo sich alle Dateien befanden, dh wo sich * .app * .dSYM und Absturzprotokolle befinden. Ich musste mehrere Beiträge lesen, um es herauszufinden. Das Bild sagt mehr als tausend Worte und ich hoffe, dieser Beitrag hilft in Zukunft allen anderen.
1- Gehen Sie zuerst zu itunesconnect und laden Sie Ihre Absturzprotokolle herunter. HINWEIS: In den meisten Fällen wird möglicherweise Folgendes angezeigt: "Es wurden zu wenige Berichte eingereicht, damit ein Bericht angezeigt werden kann." Grundsätzlich haben nicht genügend Benutzer Absturzprotokollberichte an Apple gesendet. In diesem Fall können Sie zu diesem Zeitpunkt noch nicht viel tun.
2- Wenn Sie Ihren Code nicht geändert haben, seit Sie Ihre Binärdatei an Apple gesendet haben, starten Sie Xcode für dieses Projekt und führen Sie Produkt -> Archivieren erneut aus. Andernfalls finden Sie einfach Ihre zuletzt eingereichte Binärdatei und klicken Sie mit der rechten Maustaste darauf.
quelle
Öffnen Sie in Xcode 4.2.1 Organizer , gehen Sie zu Bibliothek / Geräteprotokolle und ziehen Sie Ihre .crash-Datei in die Liste der Absturzprotokolle. Es wird nach einigen Sekunden für Sie symbolisiert.
Beachten Sie, dass Sie dieselbe Xcode-Instanz verwenden müssen, auf der der ursprüngliche Build archiviert wurde (dh das Archiv für Ihren Build muss in Organizer vorhanden sein ).
quelle
Mit Xcode 4 ist die Aufgabe noch einfacher:
und voilà. Die Protokolldatei wird automatisch für Sie importiert und symbolisiert. Vorausgesetzt, Sie haben den Build zuerst mit Xcode -> Produkt -> Archiv archiviert .
quelle
Der magische Xcode Organizer ist nicht so magisch, wenn es darum geht, meine App zu symbolisieren. Ich habe überhaupt keine Symbole für die Absturzberichte erhalten, die ich von Apple aufgrund einer fehlgeschlagenen App-Übermittlung erhalten habe.
Ich habe versucht, über die Befehlszeile den Absturzbericht in denselben Ordner zu legen wie die .app-Datei (die ich an den Store gesendet habe) und die .dSYM-Datei:
Dies lieferte nur Symbole für meine App und nicht den Kerncode der Grundlage, aber es war besser als der Nummern-Dump, den Organizer mir gibt, und es reichte mir, um den Absturz meiner App zu finden und zu beheben. Wenn jemand weiß, wie man dies erweitert, um Foundation-Symbole zu erhalten, wäre er dankbar.
quelle
In meinem Fall habe ich Absturzberichte direkt von Mail in den Organizer gezogen. Aus irgendeinem Grund wurde dadurch verhindert, dass die Absturzberichte symbolisiert wurden (ich würde gerne wissen, warum).
Wenn Sie die Absturzberichte zuerst auf den Desktop kopieren und dann von dort auf den Organizer ziehen, werden sie ordnungsgemäß symbolisiert.
Sehr spezieller Fall, ich weiß. Aber dachte, ich würde nur für den Fall teilen.
quelle
Hier ist ein weiteres Problem, das ich mit symbolicatecrash habe - es funktioniert nicht mit Apps, deren Bundle Leerzeichen enthält (z. B. 'Test App.app'). Hinweis Ich glaube nicht, dass Sie beim Senden Leerzeichen in ihrem Namen haben können, daher sollten Sie diese trotzdem entfernen. Wenn Sie jedoch bereits Abstürze haben, die analysiert werden müssen, patchen Sie symbolicatecrash (4.3 GM) als solches:
quelle
Für diejenigen, die Airbrake verwenden, gibt es oben eine solide Antwort, aber es würde für mich nicht funktionieren, ohne zu optimieren:
Funktioniert für einige Speicheradressen, aber nicht für andere, nicht sicher warum ...
quelle
Die Kombination, die für mich funktioniert hat, war:
Mit atos konnte ich die korrekten Symbolinformationen mit den Adressen und Offsets im Absturzbericht nicht auflösen. Wenn ich das getan habe, sehe ich etwas Bedeutenderes und es scheint eine legitime Stapelverfolgung zu sein.
quelle
Ich musste das Symbolicatecrash-Skript viel hacken, damit es richtig lief.
Soweit ich das beurteilen kann, muss sich die .app derzeit für symbolicatecrash im selben Verzeichnis wie die .dsym-Datei befinden. Es wird das .dsym verwenden, um die .app zu finden, aber es wird nicht das dsym verwenden, um die Symbole zu finden.
Sie sollten eine Kopie Ihres symbolischen Absturzes erstellen, bevor Sie diese Patches verwenden, damit er im dsym angezeigt wird:
Um Zeile 212 in der Funktion getSymbolPathFor_dsymUuid
Um die Zeile 265 in der Funktion matchUUID
quelle
Dies ist einfach, nachdem ich viel gesucht habe, habe ich klare Schritte gefunden, um die gesamte Absturzprotokolldatei zu symbolisieren.
Viel
Spaß beim Codieren, Riyaz
quelle
Ich bevorzuge ein Skript , das alle meine Absturzprotokolle symbolisiert.
Voraussetzungen
Erstellen Sie einen Ordner und legen Sie dort 4 Dinge ab:
symbolicatecrash
Perl-Skript - Es gibt viele SO-Antworten, die den Standort angebenDas Archiv des
Show in Finder
Builds , das den Abstürzen entspricht (von Xcode Organizer. Einfach wie und kopieren) [Ich bin mir nicht sicher, ob dies notwendig ist]Alle
xccrashpoint
Pakete - (aus Xcode OrganizerShow in Finder
können Sie alle Pakete in das Verzeichnis oder den einzelnen xccrashpoint kopieren, den Sie symbolisieren möchten.)Fügen Sie das kurze Skript zum Verzeichnis hinzu:
Das Drehbuch
Wenn Sie das Skript ausführen, erhalten Sie 2 Verzeichnisse.
allCrashes
- Alle Abstürze von allenxccrashpoint
werden da sein.symboledCrashes
- das gleiche stürzt aber jetzt mit allen Symbolen ab.Sie müssen das Verzeichnis NICHT von alten Abstürzen bereinigen, bevor Sie das Skript ausführen. es wird automatisch gereinigt. Viel Glück!
quelle
Ich fand heraus, dass die meisten vorgeschlagenen Alternativen im neuesten XCode (getestet mit Xcode 10) nicht funktionierten. Zum Beispiel hatte ich kein Glück, .crash-Protokolle in Xcode -> Organizer -> Geräteprotokoll-Ansicht per Drag & Drop zu verschieben.
Ich empfehle die Verwendung des Symbolicator-Tools https://github.com/agentsim/Symbolicator
quelle
Um Abstürze zu symbolisieren, muss Spotlight in der Lage sein, die .dSYM-Datei zu finden, die gleichzeitig mit der von Ihnen an Apple gesendeten Binärdatei generiert wurde. Da es die Symbolinformationen enthält, haben Sie Pech, wenn sie nicht verfügbar sind.
quelle
Ich wurde ein bisschen mürrisch darüber, dass hier nichts "nur zu funktionieren" scheint, also habe ich einige Nachforschungen angestellt und das Ergebnis ist:
Einrichten: QuincyKit-Backend, das Berichte empfängt. Es wurde keine Symbolisierung eingerichtet, da ich nicht einmal herausfinden konnte, was sie mir vorschlugen, damit es funktioniert.
Die Lösung: Laden Sie Absturzberichte online vom Server herunter. Sie heißen "Absturz" und gehen standardmäßig in den Ordner ~ / Downloads /. In diesem Sinne wird dieses Skript "das Richtige tun" und die Absturzberichte werden in Xcode (Organizer, Geräteprotokolle) gespeichert und die Symbolisierung wird durchgeführt.
Das Skript:
Wenn Sie QuincyKit / PLCR verwenden, können die Dinge automatisiert werden, wo Sie sie in Xcode Organizer ziehen und ablegen können, indem Sie zwei Dinge tun.
Zunächst müssen Sie das Remote-Skript admin / actionapi.php ~ Zeile 202 bearbeiten. Es scheint nicht den richtigen Zeitstempel zu haben, sodass die Datei den Namen 'Absturz' enthält, den Xcode nicht erkennt (er möchte etwas Punktabsturz):
Zweitens ändern Sie
@"[TODO]"
auf der iOS-Seite in QuincyKit BWCrashReportTextFormatter.m ~ Zeile 176@"TODO"
in, um die schlechten Zeichen zu umgehen .quelle
atos ist veraltet. Wenn Sie OSX 10.9 oder höher ausführen, müssen Sie möglicherweise ausführen
xcrun atos
quelle
Ich verwende gerne Textwrangler, um Fehler in einer binären Ablehnung eines ursprünglichen App-Uploads zu lokalisieren. (Die Absturzdaten finden Sie in Ihrem itunesConnect-Konto.) Mit der obigen Sachin-Methode kopiere ich die Datei original.crash in TextWrangler und kopiere dann die von mir erstellte symbolicatecrash-Datei in eine andere TextWrangler-Datei. Beim Vergleich der beiden Dateien werden Unterschiede festgestellt. Die symbolicateash-Datei weist Unterschiede auf, die auf die Datei und die Zeilennummer der Probleme hinweisen.
quelle
Wir verwenden Google Crashlytics, um Absturzprotokolle zu überwachen. Das Gefühl ist sehr aktuell und bequem zu verwenden.
Dokumentlinks: https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms
Alles über fehlende dSYMs Fabric enthält ein Tool zum automatischen Hochladen des dSYM Ihres Projekts. Das Tool wird über das Skript / run ausgeführt, das während des Onboarding-Prozesses zu Ihrer Run Script Build-Phase hinzugefügt wird. Es kann jedoch bestimmte Situationen geben, in denen dSYM-Uploads aufgrund eindeutiger Projektkonfigurationen fehlschlagen oder wenn Sie Bitcode in Ihrer App verwenden. Wenn ein Upload fehlschlägt, kann Crashlytics Abstürze nicht symbolisieren und anzeigen, und in Ihrem Fabric-Dashboard wird eine Warnung "Fehlendes dSYM" angezeigt.
Fehlende dSYMs können mithilfe der unten beschriebenen Schritte manuell hochgeladen werden.
Hinweis: Als Alternative zum automatisierten dSYM-Upload-Tool bietet Fabric ein Befehlszeilentool (Upload-Symbole), das manuell konfiguriert werden kann, um als Teil des Erstellungsprozesses Ihres Projekts ausgeführt zu werden. Anweisungen zur Konfiguration finden Sie im Abschnitt Upload-Symbole unten.
...
quelle