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?

4voto

Alastair Stuart Punkte 4155

Hier ist ein weiteres Problem, das ich mit symbolicatecrash habe - es funktioniert nicht mit Apps, die Leerzeichen in ihrem Bundle haben (z.B. 'Test App.app'). Beachten Sie, ich glaube nicht, dass Sie Leerzeichen in ihrem Namen haben können, wenn sie einreichen, so sollten Sie diese sowieso entfernen, aber wenn Sie bereits Abstürze, die analysiert werden müssen, Patch symbolicatecrash (4.3 GM) als solche haben:

240c240
<         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app\"";
---
>         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == '$exec_name.app'\"";
251c251
<             my $cmd = "find \"$archive_path/Products\" -name $exec_name.app";
---
>             my $cmd = "find \"$archive_path/Products\" -name \"$exec_name.app\"";

3voto

JerryH Punkte 111

Ich musste das Skript symbolicatecrash stark verändern, damit es richtig läuft.

Soweit ich das beurteilen kann, verlangt symbolicatecrash im Moment, dass sich die .app im gleichen Verzeichnis wie die .dsym befindet. Es wird die .dsym verwenden, um die .app zu finden, aber es wird die dsym nicht verwenden, um die Symbole zu finden.

Sie sollten eine Kopie Ihres symbolicatecrash machen, bevor Sie diese Patches ausprobieren, die es im dsym aussehen lassen:

Um Zeile 212 in der Funktion getSymbolPathFor_dsymUuid

212     my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);

Um Zeile 265 in der Funktion matchesUUID

265             return 1;

2voto

Shaik Riyaz Punkte 10611

Dies ist einfach, nach langem Suchen habe ich klare Schritte gefunden, um die gesamte Absturzprotokolldatei zu symbolisieren.

  • Kopieren Sie die Dateien .app , crash_report und DSYM in einen Ordner.
  • das Gerät mit xcode verbinden
  • Gehen Sie dann zu Fenster -> Geräte auswählen -> Geräteprotokolle anzeigen
  • Wählen Sie dann dieses Gerät aus und löschen Sie alle Protokolle.
  • Ziehen Sie Ihren Absturz per Drag & Drop in den Log-Bereich des Geräts. Der Absturz wird automatisch symbolisiert. Klicken Sie einfach mit der rechten Maustaste auf den Bericht und exportieren Sie ihn.

Happy Coding,
Riyaz

1voto

Yitzchak Punkte 2782

Ich bevorzuge eine Skript die alle meine Absturzprotokolle symbolisieren wird.

Voraussetzungen

Erstellen Sie einen Ordner und legen Sie dort 4 Dinge ab:

  1. symbolicatecrash Perl-Skript - es gibt viele SO-Antworten, die den Ort des Skripts angeben

  2. Das Archiv des Builds, das mit den Abstürzen übereinstimmt (aus Xcode Organizer. einfach als Show in Finder und kopieren) [Ich bin mir nicht sicher, ob dies notwendig ist]

  3. Die gesamte xccrashpoint Pakete - (aus Xcode Organizer. Show in Finder (Sie können alle Pakete im Verzeichnis oder den einzelnen xccrashpoint, den Sie symbolisieren möchten, kopieren)

  4. Fügen Sie dieses kurze Skript in das Verzeichnis ein:

    #!/bin/sh
    
    echo "cleaning old crashes from directory"
    rm -P *.crash
    rm -P *.xccrashpoint
    rm -r allCrashes
    echo "removed!"
    echo ""
    echo "--- START ---"
    echo ""
    
    mkdir allCrashes
    mkdir symboledCrashes
    find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \;
    
    cd allCrashes
    for crash in *.crash; do
        ../symbolicatecrash $crash > ../symboledCrashes/V$crash
    done
    cd ..
    
    echo ""
    echo "--- DONE ---"
    echo ""

Das Drehbuch

Wenn Sie das Skript ausführen, erhalten Sie 2 Verzeichnisse.

  1. allCrashes - alle Abstürze aus allen xccrashpoint wird dort sein.

  2. symboledCrashes - die gleichen Abstürze, aber jetzt mit allen Symbolen.

  3. Sie müssen das Verzeichnis vor dem Ausführen des Skripts NICHT von alten Abstürzen bereinigen. Das Skript bereinigt es automatisch. Viel Glück!

1voto

Ich habe herausgefunden, dass die meisten der vorgeschlagenen Alternativen im neuesten XCode nicht funktionieren (getestet mit Xcode 10). Ich hatte zum Beispiel kein Glück beim Drag-Drop von Absturzprotokollen in Xcode -> Organizer -> Geräteprotokolle -Ansicht.

Ich empfehle die Verwendung des Werkzeugs Symbolicator https://github.com/agentsim/Symbolicator

  • Symbolicator-Repository mit Git klonen und mit Xcode kompilieren und ausführen
  • Kopieren Sie die .crash-Datei (ascii-Datei, mit Stack-Trace am Anfang der Datei) und das .xarchive der abstürzenden Version in denselben temporären Ordner
  • Ziehen Sie die .crash-Datei auf das Symbolicator-Symbol im Dock und legen Sie sie dort ab.
  • In 5-30 Sekunden wird eine symbolisierte Absturzdatei im gleichen Ordner wie .crash und .xarchive erzeugt

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