2010-02-11 5 views
0

Je ne suis pas sûr s'il existe un nom pour cette technique, mais je me souviens avoir fait quelque chose comme ça il y a longtemps en C++. Je voudrais casser et observer un objet spécifique dont il y a des centaines dans mon programme. Ce serait bien si vous pouviez dire au compilateur d'utiliser un espace de mémoire réservé pour pouvoir exécuter une fois, sortir une adresse mémoire, puis recommencer avec le guaruntee d'avoir les objets alloués à la même adresse en mémoire pour que je puisse peut voir ce qui arrive à cet objet spécifique la prochaine fois.La mémoire Obj-C conserve la même adresse lors du débogage suivant

Pour le moment, je ne fais qu'attribuer un 'id de débogage' qui s'incrémente avec chaque allocation mais je pensais qu'il pourrait y avoir une façon plus propre de le faire. Je suis sûr que j'ai déjà fait cela avec Vis Studio/C++ ...

Répondre

2

Vous pouvez définir un point d'arrêt conditionnel dans Xcode afin qu'il n'interrompe le débogueur que si une certaine condition est satisfaite.

Pour ce faire, définissez le point d'arrêt normalement, puis cliquez dessus avec le bouton droit de la souris et sélectionnez Modifier le point d'arrêt.

Localisez le point d'arrêt dans la fenêtre Points d'arrêt et double-cliquez sur la colonne "Condition". Vous pouvez alors entrer une expression, quelque chose comme:

(BOOL)[[yourObject name] isEqualToString:@"foo"] 

Ceci brisera que lorsque la propriété name de yourObject est foo.

Notez que vous devez convertir le résultat de l'expression en un booléen, sinon gdb ne sait pas comment gérer le résultat de l'expression. Vous ne pouvez pas non plus utiliser la syntaxe de notation par points, vous devez utiliser la syntaxe du carré entier.

+0

+1, pas ce que je cherchais mais très utile à connaître – Sam

Questions connexes