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
?
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]
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.
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.
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.
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.
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.
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.
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!
vous pouvez aussi:
- définit un point de rupture pour interrompre l'exécution.
- l'objet doit être dans le champ d'exécution
- déplacer le pointeur de la souris sur l'objet ou la variable
- une infobulle jaune apparaîtra
- déplacer la souris sur le tooltip
- cliquez sur les deux petites flèches pointant vers le haut et vers le bas
- un menu contextuel va pop up
- sélectionnez "Print Description" , il exécutera une [description de l'objet]
- la description apparaîtra dans la sortie de la console
IMHO un peu caché et encombrant...
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.
vous pouvez imprimer des valeurs sur la fenêtre de la console à l'exécution. Ci-dessous sont les étapes :
- Placez un point de rupture pour lequel vous souhaitez obtenir des valeurs
- exécute maintenant le débogage étape par étape.
- placer un curseur sur la variable/delegate dont la valeur doit être vérifiée à l'exécution.
- Maintenant, cela permettra d'afficher la description de la variable/délégué
- en cliquant sur" i " affichera une description détaillée
- cela permet également d'imprimer des détails sur la fenêtre de la console.
ç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);
Essayez D'Exécuter->Afficher->Expressions
, Entrez le nom du tableau ou ce que vous cherchez.