449 votes

Symboles de l'application iPhone en cas de panne

Je suis à la recherche d'essayer et symbolicate mon iPhone application les rapports de plantage.

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

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

Que faire maintenant?

J'ai essayé de l'invocation:

symbolicatecrash crashreport.crash myApp.app.dSYM

et il est juste sorties du même texte qui est dans le rapport de crash pour commencer, pas symbolicated.

Suis-je en train de faire quelque chose de mal?

Toute aide serait grandement appréciée, merci.

698voto

Naveen Shan Points 6641

Les étapes pour analyser le rapport de crash d'apple:

  1. Copie de la libération .application fichier qui a été poussé vers l'appstore, l' .dSYM fichier qui a été créé au moment de la libération et du rapport d'accident de recevoir de POMME dans un DOSSIER.

  2. OUVRIR une application de terminal et allez dans le dossier créé ci-dessus (à l'aide d' cd de la commande)

  3. Exécutez atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. L'emplacement de la mémoire doit être celle à laquelle l'application s'est écrasé comme l'indique le rapport.

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

Ce serait de vous montrer la ligne exacte, le nom de la méthode qui a abouti à un crash.

Ex: [classname functionName:]; -510

Symbolicating IPA

si nous utilisons de l'IAP pour symbolicating - il suffit de renommer l'extension .ipa .zip , extraire ensuite, nous pouvons obtenir une Charge utile de Dossiers qui contiennent de l'application. Dans ce cas, nous n'avons pas besoin .dSYM fichier.

Note

Ceci ne peut fonctionner que si l'application binaires n'ont pas de symbole dépouillé. Par défaut, les versions release dépouillé les symboles. Nous pouvons la changer dans le projet de paramètres de construction de la "Bande des Symboles de Débogage Lors de la Copie" pour NON.

Plus de détails, voir ce post

178voto

Andreas Klöber Points 2082

Après la lecture de toutes ces réponses ici afin de symbolicate un crash (et, finalement, de réussite), je pense qu'il y a certains points qui manque ici qui sont vraiment important afin de déterminer pourquoi l'invocation de symbolicatecrash ne produit pas un symbolicated de sortie.

Il y a 3 actifs devant tenir ensemble quand symbolicating un crash:

  1. Le crash du fichier journal lui-même ( example.crash), soit exporté à partir de XCode de l'organisateur ou reçus à partir d'iTunes Connect.
  2. L' .app package (c - example.app) qui contient lui-même l'application binaires appartenant au crash. Je vous avez un .ipa package (c - example.ipa), alors vous pouvez extraire l' .app paquet par décompresser l' .ipa package (c - unzip example.ipa). Ensuite, l' .app package se trouve dans l'extrait Payload/ le dossier.
  3. L' .dSYM colis contenant les symboles de débogage (c - example.app.dSYM)

Avant de commencer symbolication vous devriez vérifier si tous ces objets correspondent, ce qui signifie que le rapport de crash appartient à la binaire que vous avez et que les symboles de débogage sont ceux produits lors de la compilation des binaires.

Chaque binaire est visé par un UUID qui peut être vu dans le crash du fichier journal:

...
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 rapport de crash appartient à une application de l'image binaire nommé exemple.app/exemple avec l'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 devez vérifier si les symboles de débogage vous avez appartiennent également à cette binaires:

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

Dans cet exemple, tous les actifs de l'ajustement ensemble et vous devriez être en mesure de symbolicate votre stacktrace.

De procéder à l' symbolicatecrash script:

Dans le dernier XCode version, vous devriez être en mesure d'invoquer le script via

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log

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

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

mdfind 'com_apple_xcode_dsym_uuids = *'

resp.

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

Le premier coup de projecteur invocation vous donne tous les dSYM paquets et le second vous donne la .dSYM forfaits avec un UUID spécifique. Si les projecteurs ne trouvez pas votre .dSYM forfait puis, symbolicatecrash ne sera ni. Si vous faites tout ce genre de choses, par exemple dans un sous-dossier de votre ~/Desktop spot devrait être en mesure de trouver tout.

Si symbolicatecrash recherche .dSYM package il devrait y avoir une ligne comme la suivante, en symbolicate.log:

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

Pour trouver votre .app package d'une recherche spotlight comme la suivante est invoquée par symbolicatecrash:

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

Si symbolicatecrash recherche .app ensemble devrait être l'extrait suivant en 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és en symbolicatecrash il doit imprimer le symbolicated version de votre rapport de crash.

115voto

Alan Rogers Points 8400

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)

75voto

Sachin Points 2321

Je l'ai fait avec succès, Maintenant, je veux partager avec vous les gars.

Ce sont des étapes suivantes:

Étape 1: Créer un dossier dans le bureau, j'ai donner le nom de "CrashReport" et de mettre trois fichiers ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash").

Étape 2: Ouvrez le Finder et sélectionnez Applications, où vous trouverez l'application Xcode, clic droit sur ce point et Cliquez sur "Afficher le Contenu du Paquet" , après cela, suivez ce chemin simple

"Contenu->Développeurs>plates-formes->iPhoneOS.la plate-forme>Développeur->Bibliothèque->PrivateFrameworks->DTDeviceKit.cadre->Versions->A->Ressources"

OU

"Contenu->Développeurs>plates-formes->iPhoneOS.la plate-forme>Développeur->Bibliothèque->PrivateFrameworks->DTDeviceKitBase.cadre->Versions->A->Ressources"

Où vous trouverez "symbolicatecrash" fichier , copiez-le et collez-le à "CrashReport" le dossier.

Étape 3: lancez le terminal, exécutez ces 3 Commande

  1. cd /Users/mac38/Desktop/fermeture inopinée et appuyez sur le bouton Enter

  2. l'exportation DEVELOPER_DIR="/Applications/XCode.app/Contents/Développeur" et appuyez sur Entrée

  3. ./symbolicatecrash -A-v MYApp_2013-07-18.crash MyApp.app.dSYM et appuyez sur Enter Maintenant sa Fait..

Amusez-Vous Bien.. Merci

28voto

J'ai aussi mis dsym, app bundle, et de crash dans le même répertoire avant de lancer symbolicate crash

Puis-je utiliser cette fonction définie dans mon .profil de 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é, il peut vous aider.

Vous pouvez vérifier les projecteurs "voit" votre dysm fichiers en exécutant la commande:

mdfind 'com_apple_xcode_dsym_uuids = *'

Recherchez les dsym que vous avez dans votre répertoire.

REMARQUE: dans le dernier Xcode, il n'est plus un Développeur répertoire. Vous pouvez trouver cet utilitaire ici: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X