web-dev-qa-db-fra.com

Noms de symbole manquants lors du profilage d'une application iPhone avec Instruments

Je suis en train de compiler une application IPhone via une ligne de commande (aucune option XCode n'est donc impliquée) et je ne parviens pas à afficher les noms de mes symboles lors du profilage avec Instruments. J'ai essayé plusieurs drapeaux tels que -gdawrf-2 et -g sans aucun succès. J'ai également essayé d'utiliser dsymutils pour générer un fichier .dSYM, mais je n'ai aucune idée de la façon dont je suis censé l'utiliser, de sorte que cela a également échoué.

Toute aide est la bienvenue!

55
Mac Twist

Comment Instruments obtient les informations de débogage: 

Instruments obtient les informations de débogage à partir d'un fichier .dSYM normalement généré automatiquement par XCode lors de la définition du format d'informations de débogage sur DWARF avec fichier dSYM, associé à une coche dans la case d'option Générer les symboles de débogage. La définition de ces options ajoutera une étape supplémentaire au processus de construction XCode et générera un fichier dSYM une fois l'application compilée. Chaque dSYM est construit avec un UUID qui correspond à un UUID dans une section Mach-O du fichier binaire dont il est dérivé. Un importateur Spotlight indexe les UUID de chaque fichier dSym situé dans un emplacement accessible par Spotlight sur votre Mac. Par conséquent, SPOTLIGHT fait toute la magie noire et est responsable de la liaison entre l’application que vous exécutez et le fichier .dSYM correspondant. 

Comment générer des informations de débogage et un fichier dSYM sans XCode: 

Assurez-vous que vous compilez avec les options –gdwarf-2 et -g. (D'autres combinaisons de drapeaux pourraient fonctionner) 

-g Produire des informations de débogage dans le format natif du système d'exploitation (coups de couteau, COFF, XCOFF ou DWARF 2). GDB peut fonctionner avec ce débogage information. Sur la plupart des systèmes utilisant Le format stabs, -g permet d’utiliser extra informations de débogage que seulement GDB peut utiliser; cette information supplémentaire rend le débogage fonctionne mieux en GDB, mais faire probablement planter les autres débogueurs ou refuser de lire le programme. Si vous veulent contrôler avec certitude si générer les informations supplémentaires, utilisez -gstabs +, -gstabs, -gxcoff +, -gxcoff ou -gvms (voir ci-dessous). GCC permet vous utilisez -g avec -O. Les raccourcis pris par code optimisé peut occasionnellement produire surprenant résultats: des variables que vous avez déclarées peut ne pas exister du tout; flux de contrôle peut brièvement se déplacer là où vous ne l’avez pas fait attendez-le; certaines déclarations peuvent ne pas être exécuté parce qu'ils calculent des résultats constants ou leurs valeurs étaient déjà à portée de main; certaines déclarations peuvent exécuter dans des endroits différents parce que ils ont été sortis des boucles.
Néanmoins, il s'avère possible de débogage de la sortie optimisée. Cela le rend raisonnable d'utiliser l'optimiseur pour programmes qui pourraient avoir des bugs. 

-gdwarf-2 Produire des informations de débogage au format DWARF version 2. (si cela est supporté). C'est le format utilisé par DBX sur IRIX 6. Avec cette option, GCC utilise les fonctionnalités de DWARF version 3 quand ils sont utiles; la version 3 est compatible avec version 2, mais peut toujours causer problèmes pour les anciens débogueurs.

Générez un fichier dSYM à l'aide de dsymutil. Si l'outil n'est pas reconnu en ligne de commande, utilisez spotlight pour le trouver . IMPORTANT: Placez le fichier .app sur votre mac HD avant de générer le dSYM si vous travaillez sur un lecteur en réseau.

dsymutil MyApp.app/MyApp -o MyApp.app.dSYM

Placez le fichier .dSYM sur le lecteur local du Mac et exécutez Instruments comme vous le feriez normalement. 

Réinitialiser l'indexation du projecteur: 

Si les symboles ne sont pas affichés, c'est peut-être parce que spotligh est buggé. Vous pouvez essayer de réinitialiser l'indexation de Spotlight en ajoutant votre dossier contenant le fichier dSYM (ou même votre lecteur) à l'option «Empêcher la recherche dans ces emplacements» dans les préférences Spotlight, puis en la supprimant immédiatement. 

34
Mac Twist

J'ai modifié les paramètres de mon projet pour ne pas inclure le fichier dSYM lors de la construction:

enter image description here

Le changer pour inclure le fichier dSYM a aidé le profileur à désymboliser les symboles et à corriger mon problème:

enter image description here

81
Antoine

J'avais toujours des problèmes avec ça. 

Mon problème était que je pouvais voir le fichier dSYM en cours de génération, mais Instruments ne le récupérait pas.

Pour résoudre ce problème, procédez comme suit:

  1. Localisez votre fichier dSYM (doit se trouver dans ~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_TYPE] - [DEVICE-TYPE] /
  2. Une fois les instruments arrêtés, cliquez sur Fichier -> Re-Symbolicate Document
  3. Faites défiler jusqu'à l'entrée avec le nom de votre application
  4. Cliquez sur "Localiser" et choisissez le dossier de l'étape 1
  5. Cliquez sur le bouton Démarrer pour commencer le profilage
59
youdonotexist

Dans Xcode 4.5, vous pouvez choisir de créer un profil à partir de versions Debug ou Release. Par défaut, Release supprime les symboles lors de la copie sur le périphérique. Il est très facile de passer à la configuration de débogage pour le profilage sans casser votre configuration de version. Pour ce faire, sélectionnez Product -> Edit Scheme dans le menu XCode. Sélectionnez "Profil" dans la liste des modèles qui s’affiche, puis sélectionnez la configuration de construction appropriée.

Vous pouvez également créer une configuration de version/profil distincte et l’utiliser dans la section Profile de votre modèle. L'ajout d'une configuration de construction distincte est décrit dans le Guide de l'utilisateur XCode .

15
Matt Connolly

J'ai passé trois jours à essayer de comprendre cela pour Xcode 7.1/7.3 ...

Le fait de modifier la cible de déploiement sur la dernière version (9.3 à l’époque) a corrigé ce problème pour moi. Mon entreprise cible 7.0, je devrai donc probablement créer un schéma personnalisé pour profiler le code dans Instruments afin d'éviter de devoir changer de cible (ou d'oublier de changer de cible) lors de la publication d'une version de production.

On dirait que c'est probablement un bogue si les dSYM ne fonctionnent pas en fonction de la cible de déploiement?

5
Jason Rice

Avec Xcode 6 Instruments vous pouvez fournir le fichier dSYM comme suit:

  • Fichier -> Symboles ... menu (lorsque le profilage est arrêté) 
  • sélectionnez votre application et appuyez sur le bouton Localiser  
  • sélectionnez le chemin qui contient dSYM (généralement ~/Bibliothèque/Développeur/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_CONFIGURATION] - [TARGET_PLATFORM]/). Astuce: Vous pouvez copier ce chemin depuis un terminal et utiliser le raccourci OS X ⌘+SHIFT+G dans la boîte de dialogue.

De plus, Instruments vous demandera s'il doit utiliser le chemin sélectionné pour essayer de charger dSYM pour cette application à l'avenir. Répondre oui :)

4
Anton Gaenko

Le problème est que Spotlight ne peut pas trouver les fichiers .dSYM . C'est parce qu'Apple a changé l'emplacement du dossier DerivedData . Le DerivedData va maintenant dans ~/Library

Spotlight n'indexera pas ~/Library et, autant que j'ai pu établir, ne peut pas l'indiquer soit (par exemple, mdimport est ignoré).

Un moyen de contourner le problème pour obtenir des symboles dans votre profileur consiste à simplement copier les données hors de ~/Library p. Ex. votre répertoire personnel ira bien.

J'ai utilisé cette ligne de commande:

$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/

Lorsque vous supprimez votre profileur et démarrez une nouvelle exécution de profil, vous constaterez que les symboles sont à nouveau disponibles.

2
Bram

Vérifiez le journal de construction et assurez-vous que votre commutateur -g parvient au compilateur - il est facile de se tromper en changeant les paramètres au niveau du projet et/ou de la cible pour différentes configurations de construction, etc.

1
Paul R

Une autre solution dans la version d’Instruments livrée avec Xcode 4 consiste à utiliser l’élément de menu Re-Symbolicate Document dans le menu Fichier pour Instruments. Cet élément de menu vous permet d’utiliser les symboles situés dans le fichier .dSYM du répertoire ~/Library/....

1
pmb

D'après mon expérience, cela est généralement dû au fait que "Profile" a été appelé avant que la dernière version modifiée de l'application n'ait été installée sur le périphérique cible.

Essayez de lancer l'application sur le périphérique/cible, puis en appelant à nouveau "Profil" après sa réinstallation.

1
Ben Guild

J'ai eu ce problème parce que le projet XCode était sur un partage réseau où Spotlight ne trouverait pas les fichiers dSYM. Assurez-vous que c'est sur le disque local.

0
Michael Melanson

J'ai créé une configuration de construction "Profile" pour résoudre ce problème. Voir ma réponse à une question similaire de Stackoverflow.

0
fishinear