Je comstack une application IPhone via la ligne de commande (donc pas d’options XCode impliquées) et je n’arrive pas à afficher mes noms de symboles lors du profilage avec Instruments. J’ai essayé plusieurs indicateurs tels que -gdawrf-2 et -g sans succès. J’ai aussi essayé d’utiliser dsymutils pour générer un fichier .dSYM mais je n’ai aucune idée de comment je suis censé l’utiliser pour que cela échoue aussi.
Toute aide est la bienvenue!
J’ai modifié les parameters de mon projet pour ne pas inclure le fichier dSYM lors de la création:
Le changement pour inclure le fichier dSYM a aidé le profileur à désymboliser les symboles et à corriger mon problème:
Comment Instruments obtient des informations de débogage:
Instruments obtient des informations de débogage à partir d’un fichier .dSYM qui est normalement généré automatiquement par XCode lors de la définition du format d’informations de débogage sur DWARF avec le fichier dSYM associé à une coche dans la zone d’option Générer des symboles de débogage. La définition de ces options appenda une étape supplémentaire au processus de génération 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 binary 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 faire le lien entre le fichier .app que vous utilisez et son fichier .dSYM correspondant.
Comment générer des informations de débogage et un fichier dSYM sans XCode:
Assurez-vous de comstackr avec les indicateurs –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 (stabs, COFF, XCOFF ou DWARF 2). GDB peut travailler avec cette information de débogage. Sur la plupart des systèmes utilisant le format stabs, -g permet d’utiliser des informations de débogage supplémentaires que seule GDB peut utiliser; Cette information supplémentaire facilite le débogage dans GDB, mais risque de faire planter les autres débogueurs ou de refuser de lire le programme. Si vous souhaitez vérifier si vous souhaitez générer les informations supplémentaires, utilisez -gstabs +, -gstabs, -gxcoff +, -gxcoff ou -gvms (voir ci-dessous). GCC vous permet d’utiliser -g avec -O. Les raccourcis pris par le code optimisé peuvent parfois produire des résultats surprenants: certaines variables que vous avez déclarées peuvent ne pas exister du tout; le stream de contrôle peut se déplacer brièvement là où vous ne l’attendiez pas; certaines instructions peuvent ne pas être exécutées car elles calculent des résultats constants ou leurs valeurs sont déjà disponibles; certaines instructions peuvent être exécutées à différents endroits car elles ont été déplacées hors des boucles.
Néanmoins, il est possible de déboguer des sorties optimisées. Cela rend raisonnable l’utilisation de l’optimiseur pour les programmes susceptibles d’avoir des bogues.-gdwarf-2 Produire des informations de débogage au format DWARF version 2 (si elles sont sockets en charge). C’est le format utilisé par DBX sur IRIX 6. Avec cette option, GCC utilise les fonctionnalités de DWARF version 3 lorsqu’elles sont utiles; la version 3 est compatible avec la version 2, mais peut toujours poser problème aux anciens débogueurs.
Générez un fichier dSYM à l’aide de dsymutil. Si l’outil n’est pas reconnu dans la ligne de commande, utilisez Spotlight pour le trouver. IMPORTANT: placez le fichier .app sur votre mac HD avant de générer le fichier dSYM si vous travaillez sur un disque en réseau.
dsymutil MyApp.app/MyApp -o MyApp.app.dSYM
Placez le fichier .dSYM sur le lecteur local du mac et exécutez les instruments normalement.
Réinitialiser l’indexation des projecteurs:
Si les symboles ne sont pas affichés, cela peut être dû au fait 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) à «Empêcher le spotlight de rechercher ces emplacements» dans les préférences du projecteur, puis en le supprimant immédiatement.
Dans Xcode 4.5, vous pouvez choisir de créer un profil à partir des versions Debug ou Release. Relâchez par défaut pour supprimer 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 schémas qui s’affichent, puis sélectionnez la configuration de génération correcte pour cela.
Vous pouvez également créer une configuration de version / profil distincte et l’utiliser dans la section Profile de votre schéma. La façon d’append une configuration de construction séparée est décrite dans le Guide de l’utilisateur XCode .
J’ai passé trois jours à essayer de comprendre cela pour Xcode 7.1 / 7.3 …
La modification de la cible de déploiement à la dernière version (9.3 à l’époque) a résolu ce problème pour moi. Mon entreprise cible la version 7.0. Je devrai probablement créer un schéma personnalisé pour profiler le code dans Instruments afin d’éviter de modifier la cible (ou d’oublier de modifier la cible) lorsque nous produisons une version de production.
Cela semble être un bogue si les dSYM ne fonctionnent pas en fonction de la cible de déploiement?
Avec Xcode 6 Instruments, vous pouvez fournir le fichier dSYM comme suit:
⌘+SHIFT+G
dans la boîte de dialog. De même, Instruments vous demandera s’il doit utiliser le chemin sélectionné pour essayer de charger dSYM pour cette application dans le futur. Répondez Oui 🙂
Le problème est que Spotlight ne peut pas trouver les fichiers .dSYM. Cela est dû au fait qu’Apple a modifié l’emplacement du dossier DerivedData. Le DerivedData va maintenant dans ~ / Library
Spotlight n’indexe pas ~ / Library et, autant que j’ai pu établir, ne peut pas non plus être indexé (par exemple, mdimport est ignoré).
Un travail pour obtenir des symboles dans votre profileur consiste simplement à copier les données à l’extérieur de ~ / Library, par exemple, votre répertoire personnel fonctionnera correctement.
J’ai utilisé cette ligne de commande:
$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/
Lorsque vous tuez votre profileur et lancez un nouveau cycle de profil, vous verrez que les symboles sont à nouveau disponibles.
Vérifiez le journal de compilation et assurez-vous que votre commutateur -g
passe au compilateur – il est facile de le faire mal lorsque vous modifiez les parameters au niveau du projet et / ou de la cible pour différentes configurations de construction, etc.
Un autre travail dans la version d’Instruments fournie avec Xcode 4 consiste à utiliser l’élément de menu Ré-symboliser le document sous 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 / ….
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 d’exécuter l’application sur le périphérique / cible, puis appelez à nouveau “Profil” après la réinstallation.
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 lecteur local.
J’ai créé une configuration de construction “Profile” pour résoudre ce problème. Voir ma réponse à une question similaire Stackoverflow.