web-dev-qa-db-fra.com

Le débogueur Xcode n'imprime pas les objets et affiche nil, quand ils ne le sont pas

Xcode affiche une erreur lors de la tentative d'impression d'un objet avec po <objectName>, mais seulement pour un projet.

Screenshot

erreur: impossible de matérialiser struct: la taille de la variable <nomVari> est en désaccord avec la taille de ValueObject Errored out in Execute, impossible de PrepareToExecuteJITExpression

Le débogueur Xcode affiche également TOUS les objets sous la forme nil (self exclus), lorsqu'ils ne le sont pas (NSLog affiche une sortie correcte, comme dans l'image). Je ne sais pas ce qui ne va pas avec le projet. Tous les autres projets fonctionnent bien.

Avez-vous des idées de ce que ça pourrait être? (Le nettoyage du projet n'a eu aucun effet.)

156
Binarian

Êtes-vous sûr de ne pas être en "mode de libération"?

Si vous voulez voir les valeurs de variables, vous devez être en "mode débogage" (cliquez sur le nom de votre projet dans le coin supérieur gauche près des boutons Démarrer/Arrêter, puis "Modifier le schéma ...", puis "Paramètres", puis "Paramètres". Info ", puis" Build Configuration ". Ici, définissez" Debug ". S'il était sur" Release ", c'est le problème que vous avez vu tout nil).

262
Mick

J'ai défini "Niveau d'optimisation" pour la configuration de débogage sur "Aucun" et le problème a été résolu.

35
Leszek Zarna

Assurez-vous que Address Sanitizer est désactivé dans les paramètres de votre schéma. Le désinfectant d'adresses ne fonctionne pas bien avec le débogueur.

  1. Allez à Edit Scheme (Produit >> Scheme >> Edit Scheme), choisissez Exécuter, puis cliquez sur l'onglet Diagnostics.
  2. Assurez-vous que "Enable Address Sanitizer" est désactivé.

enter image description here

26
KIO

Il semble que tout le monde a sa propre solution.

Pour moi, j'utilise Objective-C et Swift en même temps.

Tout d’abord, allez à TARGETS -> Build Settings et cherchez le code generation

Tu trouveras Apple LLVM 6.0 et Swift Compiler

Changer leur Optimization Level all à None, puis à déboguer, vous pouvez trouver la valeur non nil

Étonnamment une fois que vous pouvez voir la valeur, vous résolvez ce problème de façon permanente, alors vous pouvez changer le Optimization Level à cela l'habitude d'être.

16
Artwalk

Cela peut se produire d’autres manières. Pour moi, c'était parce que la valeur "Other C Flags" était définie sur "-O2", même pour la version de débogage. Désactiver cette option pour la génération de débogage a résolu le problème.

11
ThomasW

Filtered debug output

Pour moi, Xcode filtrait la sortie du débogueur. Assurez-vous que votre paramètre de sortie est Sortie du débogueur ou Toutes les sorties.

8
Curmudgeonlybumbly

Je viens de rencontrer ce problème et de constater que c’est parce que Deployment Postprocessing = YES dans les paramètres de construction.

Changer ceci en NO le corrige, comme le montre la capture d'écran ci-dessous:

enter image description here

Version Xcode: 6.0.1 (6A317) sur OSX 10.9.5

6
Luke

Je viens de rencontrer un problème similaire: à un moment donné, le débogueur Xcode a imprimé certains types d’objets, notamment NSStrings en tant que (null) bien qu’ils aient été initialisés avec une valeur. Imprimé via

NSLog(@"String value: %@", myString);

la valeur correcte pour l'objet a été affichée.

Déroutant! Résoudre le problème était plutôt facile: je viens d’arrêter Xcode et de redémarrer mon ordinateur. Après avoir redémarré Xcode, tout fonctionne à nouveau correctement :).

5
Torsten Barthel

Assure-toi Link-Time Optimization = No pour le mode débogage dans les paramètres de construction.

5
llama591
  1. Supprimer les données dérivées
  2. Tout à fait Xcode/Redémarrer
  3. Projet propre

C'est tout ce qu'il a fallu pour moi.

3
TMin

Les solutions ici résoudront également le bogue où vous voyez error: <EXPR>:1:1: error: use of unresolved identifier à chaque fois que vous essayez de po une variable.

Pour moi, la solution était d'aller à Build Settings et rechercher Optimization Level et assurez-vous que chaque paramètre Debug a été défini sur None.

2
Kevin Xu

Accédez à "Autres indicateurs C" dans le paramètre de construction et définissez la valeur de débogage de -o2 à -O0.

1
Shauket Sheikh

Je me suis heurté à cela aussi et quand j'ai découvert que j'étais en mode de publication, je suis passé au débogage ... pas de solution. Il s'avère que je devais d'abord faire un nettoyage (cmd + shift + k).

Donc, je pense que ce qui se passe, c'est qu'après le mode de publication intégré, tout n'est pas recompilé dans develop et donc lldb ne peut pas lire correctement les symboles. Après le nettoyage et la recompilation, cela a fonctionné pour moi.

0
Spencer Hall