web-dev-qa-db-fra.com

lldb ne parvient pas à imprimer les valeurs des variables avec "erreur: la référence à 'id' est ambiguë"

Depuis que j'ai mis à jour vers xcode 4.3 et l'ai laissé basculer mon débogueur vers lldb, toute demande d'impression d'une variable membre é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

'soi' est ok:

(lldb) print self
(LoginViewController *) $6 = 0x1cd54d50

Et d'autres formes d'impression de la variable membre échouent également:

(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

Sinon, tout le reste semble bien fonctionner. La fenêtre variable de Xcode peut récupérer correctement la valeur. J'ai essayé une construction propre et en supprimant ~/Library/Developer/Xcode/DerivedData /. Google n'a révélé aucun autre cas du même problème.

J'ai trouvé un fil sur le forum de développement d'Apple mais aucune solution:

https://devforums.Apple.com/message/623694

Je l'ai signalé à Apple sous l'ID de bogue # 11029004.

45
JosephH

J'ai trouvé une solution:

Utilisez 'Modifier le schéma' sous le menu 'Produit', sélectionnez 'Exécuter' dans la barre de gauche, l'onglet 'Info' et changez le débogueur en gdb (cela ne s'applique pas à xcode 5, qui n'a plus gdb).

Apparemment Apple pensait qu'ils avaient corrigé ce bogue dans xcode 4.3.1, mais cela se produit toujours. J'ai soumis quelques informations de débogage supplémentaires qu'ils ont demandées, donc j'espère que ce sera corrigé pour le prochaine version de xcode. Il échoue toujours en 4.3.2. Voir https://devforums.Apple.com/message/623694 pour une mise à jour d'Apple.

[~ # ~] mise à jour [~ # ~]

J'ai essayé divers cas avec lesquels j'ai eu des problèmes, et ils semblent tous fonctionner correctement avec lldb dans Xcode 4.4.1 - je recommande donc fortement la mise à niveau si vous rencontrez ce problème.

39
JosephH

Essayez avec l'expression suivante,

p self.view.bounds.size.width

ou utiliser,

po self.view

p - Imprimer n'est utilisé que pour imprimer des valeurs normales/simples tandis que po - Imprimer objet fonctionne de la même manière que NSLog pour imprimer la valeur d'un objet

3
Bhavik Modi

Utilisation Edit scheme dans le menu "Produit", sélectionnez "Exécuter" dans la barre de gauche, l'onglet "Info" et changez le débogueur en gdb.

Product> Edit Scheme> Run (Schémas)> Build Configuration il a trois options (certains pourraient ne voir que deux 1, 2) 1. Débogage 2. Version 3. AdHoc

Vérifiez simplement s'il est défini sur Debug sinon, faites-le déboguer.

C'était l'erreur que je faisais

2
thesummersign

(Xcode5) Ce n'est pas vraiment une réponse directe à la question d'origine, mais je pense que cela peut être pertinent et je détesterais que quelqu'un d'autre gaspille des heures comme je l'ai fait pour le retrouver. Le problème que j'avais était qu'aucune valeur de variable n'était affichée dans la fenêtre de débogage.

J'ai vérifié l'invocation qui était réellement donnée au compilateur et j'ai constaté qu'elle était optimisée avec -Os malgré que chaque projet et cible dans l'espace de travail soit explicitement défini sur -O0, et que les paramètres mentionnés dans d'autres réponses ici soient tous définis sur Déboguer. Après beaucoup de recherches, j'ai trouvé qu'il y avait une option dans la section 'Info' de chaque projet appelée "Utiliser xxx pour les builds en ligne de commande" où xxx est Debug/Release ou toutes les configurations disponibles. Selon la description de l'info-bulle, cette option ne devrait affecter que les builds effectués via la ligne de commande avec l'outil xcodebuild (ce qui est un peu étrange car cet outil est parfaitement capable de sélectionner le schéma à utiliser comme option de ligne de commande). Quoi qu'il en soit, changer cette option en Debug a finalement obtenu le IDE pour dire au compilateur que je voulais -O0 et -g. Je ne me souviens pas que cela se soit produit avec Xcode4, avec le même espace de travail.

Je devrais également ajouter que vous voudrez peut-être 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 étaient introuvables (il semblait que les en-têtes précompilés n'étaient pas générés correctement). Après environ une heure de poignardage dans le noir, j'ai constaté que si je remettais d'abord l'option susmentionnée sur Release et que je faisais un nettoyage, je pouvais la mettre sur Debug et construire avec succès.

Est-ce que quelqu'un sait si l'équipe de développement Xcode l'utilise réellement elle-même? J'ai la nette impression que non.

1
iforce2d

Accédez à Product-> Scheme-> New Scheme... et créez un nouveau schéma pour votre cible. Nettoyez votre produit sous Product-> Clean et votre application devrait fonctionner correctement.

Faire cela a résolu mon problème.

0
Sander Blokhorst