Question Symboles de l'application iPhone en cas de panne


Je cherche à symboliser les rapports d'erreur de mon application iPhone.

J'ai récupéré les rapports de panne sur iTunes Connect. J'ai l'application binaire que j'ai soumis à l'App Store et j'ai le fichier dSYM qui a été généré dans le cadre de la construction.

J'ai tous ces fichiers ensemble dans un seul répertoire qui est indexé par spotlight.

Et maintenant?

J'ai essayé d'invoquer:

symbolicatecrash crashreport.crash myApp.app.dSYM

et il ne fait que générer le même texte que dans le rapport de plantage, et non symbolisé.

Est-ce que je fais quelque chose de mal?


417
2017-09-22 15:44


origine


Réponses:


Étapes à suivre pour analyser le rapport d'erreur d'apple:

  1. Copiez le fichier .app de version qui a été copié sur l'appstore, le fichier .dSYM créé au moment de la publication et le rapport de plantage reçu de APPLE dans un fichier. DOSSIER.

  2. OPEN terminal application et aller dans le dossier créé ci-dessus (en utilisant cd commander)

  3. Courir atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. L'emplacement de la mémoire devrait être celui où l'application s'est plantée selon le rapport.

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

Cela vous montrerait la ligne exacte, le nom de la méthode qui a abouti à un crash.

Ex: [classname functionName:]; -510

IPA symbolisant

si nous utilisons IPA pour symboliser - il suffit de renommer l'extension .ipa avec .zip, extrayez-le, nous pouvons obtenir un dossier de charge utile qui contient l'application. Dans ce cas, nous n'avons pas besoin de fichier .dSYM.

Remarque

Cela ne peut fonctionner que si le binaire de l'application n'a pas de symboles supprimés. Par défaut, les versions libèrent les symboles. Nous pouvons le changer dans les paramètres de construction du projet "Supprimer les symboles de débogage pendant la copie" en NO.

Plus de détails voir ceci poster


683
2018-02-10 08:44



Après avoir lu toutes ces réponses ici pour symboliser un crash log (et finalement réussir), je pense qu'il manque quelques points qui sont vraiment importants pour déterminer pourquoi l'invocation de symbolicatecrash ne produit pas une sortie symbolisée.

Il y a 3 actifs qui doivent s'emboîter lorsqu'ils symbolisent un journal de plantage:

  1. Le fichier journal de plantage lui-même (c.-à-d. example.crash), exporté depuis l'organiseur de XCode ou reçu d'iTunes Connect.
  2. le .app paquet (c.-à-d. example.app) qui contient elle-même le binaire de l'application appartenant au journal de crash. Si vous avez un .ipa paquet (c.-à-d. example.ipa) alors vous pouvez extraire le .app paquet en décompressant le .ipa paquet (c.-à-d. unzip example.ipa). Ensuite, le .app paquet réside dans l'extrait Payload/ dossier.
  3. le .dSYM package contenant les symboles de débogage (c.-à-d. example.app.dSYM)

Avant de commencer la symbolisation, vous devez vérifier si tous ces artefacts correspondent, ce qui signifie que le journal de plantage appartient au fichier binaire que vous avez et que les symboles de débogage sont ceux produits lors de la construction de ce fichier binaire.

Chaque binaire est référencé par un UUID qui peut être vu dans le fichier journal de plantage:

...
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
...

Dans cet extrait, le journal des incidents appartient à une image binaire d'application nommée example.app/example avec UUID aa5e633efda8346cab92b01320043dc3.

Vous pouvez vérifier l'UUID du paquet binaire que vous avez avec dwarfdump:

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

Ensuite, vous devriez vérifier si les symboles de débogage que vous avez également appartiennent à ce binaire:

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

Dans cet exemple, tous les éléments s'emboîtent et vous devriez pouvoir symboliser votre pile de pile.

Procéder à la symbolicatecrash scénario:

Dans Xcode 8.3, vous devriez pouvoir appeler le script via

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

Si ce n'est pas là, vous pouvez exécuter un find . -name symbolicatecrash dans votre répertoire Xcode.app pour le trouver.

Comme vous pouvez le voir, il n'y a plus de paramètres donnés. Le script doit donc trouver les symboles binaires et de débogage de votre application en exécutant une recherche de spotlight. Il recherche les symboles de débogage avec un index spécifique appelé com_apple_xcode_dsym_uuids. Vous pouvez faire cette recherche vous-même:

mdfind 'com_apple_xcode_dsym_uuids = *'

resp.

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

La première invocation spotlight vous donne tous les paquets dSYM indexés et la seconde vous donne le .dSYM packages avec un UUID spécifique. Si le projecteur ne trouve pas votre .dSYM paquet alors symbolicatecrash ne sera ni. Si vous faites tout cela par exemple dans un sous-dossier de votre ~/Desktop Spotlight devrait pouvoir tout trouver.

Si symbolicatecrash trouve ton .dSYM paquet il devrait y avoir une ligne comme celle-ci dans symbolicate.log:

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

Pour trouver votre .app emballer une recherche Spotlight comme suit est appelé par symbolicatecrash:

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

Si symbolicatecrash trouve ton .app paquet il devrait y avoir l'extrait suivant dans symbolicate.log:

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

Si toutes ces ressources sont trouvées par symbolicatecrash il devrait imprimer la version symbolisée de votre journal de panne.

Sinon, vous pouvez transmettre vos fichiers dSYM et .app directement.

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

Remarque: La trace symbolique sera sortie vers le terminal, pas symbolicate.log.


157
2017-12-02 12:47



Avec la dernière version de Xcode (3.2.2), vous pouvez glisser et déposer tous les rapports d'erreur dans la section Device Logs de l'organiseur Xcode et ils seront automatiquement symbolisés pour vous. Je pense que cela fonctionne mieux si vous avez construit cette version de l'application en utilisant Build & Archive (également partie de Xcode 3.2.2)


114
2018-04-20 06:33



J'ai réussi, maintenant je veux partager avec vous tous les gars.

Ce sont les étapes suivantes:

Étape 1: Créer un dossier dans le bureau, je donne le nom à "CrashReport" et mettre trois fichiers ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash") en elle.

Étape 2: Ouvrez le Finder et accédez à Applications, où vous trouverez l'application Xcode, cliquez avec le bouton droit de la souris et cliquez sur "Afficher le contenu du paquet", puis suivez ce chemin simple.

"Contents-> Developer-> Platforms-> iPhoneOS.platform-> Developer-> Library-> PrivateFrameworks->DTDeviceKit.framework-> Versions-> A-> Ressources "

OU

"Contents-> Developer-> Platforms-> iPhoneOS.platform-> Developer-> Library-> PrivateFrameworks->DTDeviceKitBase.framework-> Versions-> A-> Ressources "

OU

Pour Xcode 6 et au-dessus, le chemin est Applications / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Versions / A / Ressources

Lorsque vous trouvez le fichier "symbolicatecrash", copiez-le et collez-le dans le dossier "CrashReport".

Étape 3: lance le terminal, lance ces 3 commandes

  1. cd / Users / mac38 / Desktop / CrashReport et appuyez sur le bouton Entrée

  2. export DEVELOPER_DIR = "/ Applications / Xcode.app / Contents / Developer" et appuyez sur Entrée

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM et appuyez sur Entrée maintenant son fait .. (NOTE: versions autour de 6.4 ou plus tard n'ont pas l'option -A - il suffit de le laisser)

Heureux codage .. Merci


72
2017-07-19 13:50



J'utilise Airbrake dans mes applications, ce qui fait un assez bon travail de journalisation des erreurs à distance.

Voici comment je les symbolise avec atos si le backtrace en a besoin:

  1. Dans Xcode (4.2), allez à l’organisateur, faites un clic droit sur l’archive depuis lequel le fichier .ipa a été généré.

  2. Dans le terminal, cd dans la xcarchive par exemple MyCoolApp 10-27-11 1.30 PM.xcarchive

  3. Entrez le suivant atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp' (n'oubliez pas les guillemets simples)

  4. Je n'inclus pas mon symbole dans cet appel. Ce que vous obtenez est un curseur de bloc sur une ligne vide.

  5. Ensuite, je copie / colle mon code de symbole à ce curseur et j'appuie sur entrer. Vous verrez quelque chose comme:

    -[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)

  6. Vous êtes de retour à un curseur de bloc et vous pouvez coller dans d'autres symboles.

Être en mesure de passer par votre backtrace un élément sans ré-entrer le premier bit est un gain de temps agréable.

Prendre plaisir!


28
2017-10-27 21:06



Je mets également dsym, bundle d'application, et le journal de panne ensemble dans le même répertoire avant d'exécuter le crash de symbolicate

Ensuite, j'utilise cette fonction définie dans mon .profile pour simplifier l'exécution de symbolicatecrash:

function desym
{
    /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}

Les arguments ajoutés peuvent vous aider.

Vous pouvez vérifier que Spotlight "voit" vos fichiers dysm en lançant la commande:

mdfind 'com_apple_xcode_dsym_uuids = *'

Cherchez le dsym que vous avez dans votre répertoire.

REMARQUE: à partir du dernier Xcode, il n'y a plus de répertoire Developer. Vous pouvez trouver cet utilitaire ici:

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers ions / A / Ressources / symbolicatecrash


28
2017-09-22 21:18



Juste une réponse simple et à jour pour xcode 6.1.1.

PAS

1.Xcode> Window> Devices.

2.Sélectionnez un périphérique dans une liste de périphériques sous la section DEVICES.

3.Sélectionnez Afficher les journaux de périphérique.

4.Sous la section Tous les journaux, vous pouvez faire glisser directement le rapport.

5.Xcode Symbolise automatiquement le rapport d'erreur pour vous.

6.Vous pouvez trouver le rapport d'erreur Symbolicated en faisant correspondre sa date / heure avec la date / heure mentionnée dans votre rapport d'erreur.


20
2018-02-02 14:45



Étapes pour symboliser un rapport d'erreur automatiquement en utilisant XCode:

MISE À JOUR POUR XCODE 9

  1. Relier tout Appareil iOS sur votre Mac (oui physique, oui je sais que c'est stupide)

  2. Choisissez "Appareils" dans le menu "Fenêtre" enter image description here

  3. Cliquez sur votre appareil sur la gauche et afficher les journaux de périphériques sur la droite enter image description here

  4. Attendez. Cela pourrait prendre une minute pour apparaître. Peut-être faire Command-A puis Delete va accélérer cela.

  5. Étape critique non documentée: renommer le rapport d'erreur que vous avez reçu de iTunesConnect .txt extension à .crash extension

  6. Faites glisser le rapport d'accident dans cette zone à gauche enter image description here

Ensuite, Xcode symbolisera le rapport d'erreur et affichera les résultats.

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


20
2018-06-23 03:54



Même si je développais des applications depuis quelques années maintenant, c'était la première fois que je déboguais un fichier binaire et je me suis senti comme un NOOB complet pour savoir où étaient tous les fichiers, où se trouvait * .app *. J'ai dû lire plusieurs messages pour le comprendre. La photo vaut mille mots et j'espère que ce message aidera quelqu'un d'autre à l'avenir.

1- Allez d'abord à itunesconnect et téléchargez vos logs de crash. NOTE: Dans la plupart des cas, vous pouvez obtenir quelque chose comme "Trop peu de rapports ont été soumis pour qu'un rapport soit affiché". Fondamentalement pas assez d'utilisateurs ont soumis des rapports de journal de plantage à Apple, auquel cas vous ne pouvez pas faire grand-chose à ce stade.

enter image description here

enter image description here

2- Maintenant, si vous n'avez pas changé votre code depuis que vous avez envoyé votre fichier binaire à Apple, lancez Xcode pour ce projet et faites de nouveau Product -> Archive. Sinon, trouvez simplement votre dernier fichier binaire envoyé et faites un clic droit dessus.

enter image description here

enter image description here

enter image description here

enter image description here


14
2017-07-06 19:13