Xcode Debugger: voir la valeur de la variable

My code in a Uitable ViewController:

delegate.myData = [myData objectAtIndex:indexPath.row];

Comment puis-je voir les valeurs de delegate.myData ou indexPath.row dans le Débogueur? delegate.myData devrait être un tableau et indexPath.row un int . Je ne vois que les adresses mémoire des objets delegate et indexPath mais où sont myData et row ?

alt text

91
demandé sur Manni 2011-01-19 15:22:15

7 réponses

Cochez cette Comment voir le contenu de NSDictionary variable dans Xcode débogueur?

j'utilise aussi

po variableName
print variableName

en Console.

Dans votre cas, il est possible d'exécuter

print [myData objectAtIndex:indexPath.row]  

ou

po [myData objectAtIndex:indexPath.row]
110
répondu Andriy 2017-05-23 12:10:43

je suis d'accord avec d'autres affiches que Xcode comme un environnement en développement devrait inclure un moyen facile de déboguer des variables. Eh bien, bonne nouvelle, il en EST un!

après avoir cherché et ne pas trouver une réponse simple/tutoriel sur la façon de déboguer des variables dans Xcode je suis allé explorer avec Xcode lui-même et a trouvé cela (au moins pour moi) découverte très utile.

comment déboguer facilement vos variables dans Xcode 4.6.3

Dans L'écran principal de Xcode assurez-vous de voir la zone de débogage en bas en cliquant sur le bouton coin supérieur droit montré dans la capture d'écran.

Debug Area button

Debug Area in Xcode 4.6.3

définissez maintenant un point de rupture – la ligne dans votre code où vous voulez que votre programme s'arrête, en cliquant sur la frontière de votre zone de Code.

Breakpoint

maintenant dans le Debug Zone regarder pour ces boutons et cliquez sur celui du milieu. Vous remarquerez que votre région est désormais divisée en deux.

Split Debug Area

Should look like this

Lancez maintenant votre application.

lorsque le premier point de rupture est atteint lors de l'exécution de votre programme, vous verrez sur le côté gauche toutes les variables disponibles à ce point de rupture.

Search Field

vous pouvez étendre les flèches de gauche sur la variable pour un plus grand détail. Et même utiliser le champ de recherche pour isoler cette variable que vous voulez et la voir changer en temps réel alors que vous "entrez" dans la portée du point de rupture.

Step Into

sur le côté droit de votre zone de débogage vous pouvez envoyer pour imprimer les variables que vous désirez en utilisant le bouton droit de la souris sur la variable désirée.

Contextual Menu

comme vous pouvez le voir, ce menu contextuel est rempli d'options de débogage très intéressantes. Comme regarder qui a déjà été suggéré avec des commandes dactylographiées ou même modifier la valeur ... qui change la valeur d'exécution de votre variable!

20
répondu Lex L. 2018-07-16 23:35:51

vous pouvez aussi:

  1. définit un point de rupture pour interrompre l'exécution.
  2. l'objet doit être dans le champ d'exécution
  3. déplacer le pointeur de la souris sur l'objet ou la variable
  4. une infobulle jaune apparaîtra
  5. déplacer la souris sur le tooltip
  6. cliquez sur les deux petites flèches pointant vers le haut et vers le bas
  7. un menu contextuel va pop up
  8. sélectionnez "Print Description" , il exécutera une [description de l'objet]
  9. la description apparaîtra dans la sortie de la console

IMHO un peu caché et encombrant...

19
répondu LightMan 2012-02-17 19:21:33

votre confusion provient du fait que les propriétés déclarées ne sont pas (nécessairement nommées de la même façon que) les variables de (instance).

l'expression

indexPath.row

est équivalent à

[indexPath row]

et la cession

delegate.myData = [myData objectAtIndex:indexPath.row];

est équivalent à

[delegate setMyData:[myData objectAtIndex:[indexPath row]]];

en supposant un nom standard pour les propriétés synthétisées.

de plus, delegate est probablement déclaré comme étant de type id<SomeProtocol> , c'est-à-dire que le compilateur n'a pas été en mesure de fournir des informations de type réel pour delegate à ce moment-là, et le débogueur se base sur les informations fournies lors de la compilation. Comme id est un type générique, il n'y a pas d'information de compilation sur les variables d'instance dans delegate .

ce sont les raisons pour lesquelles vous ne voyez pas myData ou row comme variables.

si vous souhaitez inspecter le résultat de l'envoi de -row ou -myData , vous pouvez utiliser les commandes p ou po :

p (NSInteger)[indexPath row]
po [delegate myData]

ou utilisez la fenêtre des expressions (par exemple, si vous savez que votre delegate est de type réel MyClass * , vous pouvez ajouter une expression (MyClass *)delegate , ou faites un clic droit sur delegate , choisissez View Value as… et tapez le type réel de delegate (par ex. MyClass * ).

cela dit, je suis d'accord que le débogueur pourrait être plus utile:

  • il pourrait y avoir une option pour dire à la fenêtre du débogueur d'utiliser des informations de type run-time au lieu des informations de compilation. Cela ralentirait le débogueur, certes, mais fournirait des informations utiles;

  • les propriétés déclarées peuvent être présentées dans un groupe appelé propriétés et permet l'inspection (optionnelle) directement dans la fenêtre de débogage. Cela ralentirait également le débogueur en raison de la nécessité d'envoyer un message/exécuter une méthode pour obtenir des informations, mais fournirait aussi des informations utiles.

9
répondu Chris G. 2011-09-21 13:23:40

vous pouvez imprimer des valeurs sur la fenêtre de la console à l'exécution. Ci-dessous sont les étapes :

  1. Placez un point de rupture pour lequel vous souhaitez obtenir des valeurs
  2. exécute maintenant le débogage étape par étape.
  3. placer un curseur sur la variable/delegate dont la valeur doit être vérifiée à l'exécution.
  4. Maintenant, cela permettra d'afficher la description de la variable/délégué
  5. en cliquant sur" i " affichera une description détaillée
  6. cela permet également d'imprimer des détails sur la fenêtre de la console.

Screenshot for printing details on console window

6
répondu Jayprakash Dubey 2014-08-25 14:34:32

ça devient un peu compliqué. Ces objets sont des classes ou des structures personnalisées, et regarder à l'intérieur D'eux n'est pas aussi facile sur Xcode que dans d'autres environnements de développement.

si j'étais vous, J'Enregistrerais les valeurs que vous voulez voir, avec une description.

I. e:

NSLog(@"Description of object & time: %i", indexPath.row);
1
répondu Aurum Aquila 2011-01-19 12:51:22

Essayez D'Exécuter->Afficher->Expressions

, Entrez le nom du tableau ou ce que vous cherchez.

1
répondu tbone 2011-01-19 14:41:57