lldb ne parvient pas à imprimer les valeurs de la variable avec “erreur: la référence à la " id " est ambigu”
Depuis que j'ai mis à jour xcode 4.3 et laisser passer mon débogueur à lldb, toute demande d'impression d'un membre de la variable échoue avec ce message d'erreur:
(lldb) print request
error: error: reference to 'id' is ambiguous
note: candidate found by name lookup is 'id'
note: candidate found by name lookup is 'id'
error: 1 errors parsing expression
"self" est ok:
(lldb) print self
(LoginViewController *) $6 = 0x1cd54d50
Et d'autres formes d'impression de la variable de membre également de l'échec:
(lldb) print self.request
error: property 'request' not found on object of type 'LoginViewController *'; did you mean to access ivar 'request'?
error: 1 errors parsing expression
(lldb) print self->request
error: error: reference to 'id' is ambiguous
note: candidate found by name lookup is 'id'
note: candidate found by name lookup is 'id'
error: 1 errors parsing expression
Tout le reste sinon semble fonctionner correctement. Xcode variable de la fenêtre peut correctement récupérer la valeur. J'ai essayé une construction propre et la suppression de ~/Library/Développeur/Xcode/DerivedData/. Google n'a pas révélé toutes les autres instances du même problème.
J'ai trouvé un thread sur Apple dev forum mais aucune solution:
https://devforums.apple.com/message/623694
Je l'ai signalé à Apple que le Bug ID# 11029004.
- lldb est toujours un travail en cours.
- Je me demande pourquoi Apple a fait le débogueur par défaut dans XCode 4.3 si c'est le cas.
- Pour une raison quelconque, la possibilité d'afficher ivars dans le débogueur a une faible priorité à la Pomme. De nombreuses fois ivars qui sont créés auto-créé par
@property
déclarations ou déclarés dans le@implementation
ne sont pas affichables. Les choses s'améliorent lentement. Veuillez soumettre un rapport de bogue à bugreport.apple.com. - J'ai le même problème, mais seulement dans mon projet principal, pas dans un fraîchement généré projet. N'ai pas compris ce qu'elle pourrait être... les Bibliothèques? C++?
- Pour lldb être le débogueur par défaut dans Xcode 4.3, mais pour quelque chose d'aussi fondamental de ne pas travailler ... quelque chose ne va pas. J'ai essayé p, po, et de les imprimer, en vain. lldb est inutile pour moi dans cet état. J'espère que c'est quelques autres peu de la folie qui est facilement résolu. Va faire un rapport de bogue dans le temps. Pendant ce temps, c'est encourageant: lldb.llvm.org/status.html
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution de contournement:
Option "Modifier le régime de" sous le "Produit " menu", sélectionnez "Exécuter" dans la barre de gauche, l'onglet "Info", et de changer le Débogueur gdb (cela ne s'applique pas à xcode 5, qui n'a plus gdb).
Apparemment, Apple a pensé qu'ils avaient résolu ce bug dans xcode 4.3.1, mais il arrive encore. J'ai soumis supplémentaire les informations de débogage ils ont demandé, alors j'espère que ce sera corrigé pour la prochaine version de xcode. Il est toujours à la peine en 4.3.2. Voir https://devforums.apple.com/message/623694 pour une mise à jour d'Apple.
Mise à JOUR
J'ai essayé différents cas, j'ai eu de la difficulté avec, et ils semblent tous être fonctionne bien avec lldb dans Xcode 4.4.1 - par conséquent, je recommande fortement la mise à niveau si vous rencontrez ce problème.
Essayer avec l'expression suivante,
ou de l'utilisation,
p - Impression est seulement utilise pour l'impression normale/valeurs simples
alors que,
po - Impression de l'Objet de travaux de même que NSLog pour imprimer la valeur d'un objet
Utilisation
Edit scheme
sous le terme de "Produit " menu", sélectionnez "Exécuter" dans la barre de gauche, l'onglet "Info", et de changer le Débogueur gdb.Product
>Edit Scheme
>Run
(Plans)>Build Configuration
il a trois options (Certains pourraient voir seulement deux 1, 2)
1. Debug
2. Libération
3. AdHoc
Juste vérifier si il est mis à
Debug
si non, alors en faire de Débogage.C'était l'erreur que je faisais
(Xcode5) Ce n'est pas vraiment une réponse directe à la question initiale, mais je pense qu'il peut être pertinent et je ne voudrais pas penser à quelqu'un d'autre les déchets d'heures que je n'ai suivi vers le bas. Le problème que j'avais était qu'aucune des valeurs de variables a été montré dans la fenêtre de débogage.
J'ai vérifié l'invocation qui a réellement été donné pour le compilateur, et trouvé que c'était d'être optimisé avec -Os en dépit de chaque projet et de la cible dans l'espace de travail étant de définir explicitement à -O0, et les réglages mentionnés dans d'autres réponses ici tous ensemble pour Déboguer. Après beaucoup de recherches, j'ai trouvé qu'il existe une option dans les "informations" de la page de chaque projet intitulé "Utilisation de xxx pour de ligne de commande génère" où xxx est Debug/Release ou quelles que soient les configurations sont disponibles. Selon l'infobulle, cette option ne devrait toucher que les builds fait via la ligne de commande avec le xcodebuild outil (qui est un peu étrange, parce que l'outil est parfaitement capable de choisir la méthode à utiliser comme une option de ligne de commande). De toute façon, la modification de cette option de Débogage enfin eu l'IDE de dire au compilateur que je voulais-O0 et -g. Je ne me souviens pas ce qui se passe avec Xcode4, avec le même espace de travail.
Je dois aussi ajouter, que vous pourriez vouloir faire un nettoyage avant de modifier ce paramètre. Je l'ai changé sans nettoyage, et tout à coup certains de mes fichiers d'en-tête n'avaient pas été trouvé (il me semblait que les en-têtes précompilés n'ont pas été correctement généré). Après une heure ou deux d'un coup de couteau dans le noir, j'ai trouvé que si j'ai d'abord définir le ci-dessus mentionné option vers l'arrière pour Libérer et fait un nettoyage, puis je pourrais le mettre à Déboguer et de construire avec succès.
Quelqu'un sait si l'équipe de développement Xcode réellement l'utiliser eux-mêmes? Je reçois la nette impression qu'ils ne le font pas.
Aller à
Product
->Scheme
->New Scheme...
et de créer un nouveau plan de votre cible.Nettoyer votre produit en vertu de
Product
->Clean
et votre application devrait fonctionner correctement.Faire cela a résolu mon problème.