web-dev-qa-db-fra.com

Comment changer la valeur de NSString lors du débogage dans Xcode?

Lorsque je suis arrêté à un point d'arrêt dans Xcode, je peux voir la valeur des variables NSString. Comment puis-je les changer? Je peux changer les variables int ou double, mais pas NSString.

44
xmartin

Vous pouvez le faire dans la console de débogage. Disons que vous avez NSString* myVar. Dans la console, après (gdb), tapez set myVar = @"My new string". Si vous utilisez (lldb), utilisez plutôt l'expression équivalente expr myVar = @"My new string".

Cela peut ne pas apparaître correctement dans le panneau des variables, mais vous pouvez vérifier la valeur en entrant po myVar dans la console. Votre code devrait prendre la nouvelle valeur. 

Pour des informations intéressantes sur l’utilisation de expr, consultez cet article StackOverflow.

82
MikeG

Vous pouvez, mais vous devez appeler le code à partir de la commande de débogueur Invite . Par exemple, supposons que le point d'arrêt se déclenche juste après cette ligne:

NSString *myString = @"My current string";

Puis, à l'invite (gdb), tapez:

call myString = @"My new string"

Vous pouvez po myString avant de changer la chaîne et après l'avoir modifiée pour vérifier qu'elle a bien changé.

Autre exemple: supposons que vous souhaitiez modifier le titre d'un contrôleur de vue. Vous pouvez utiliser le setter. * Remarque: la notation par points n'est pas prise en charge sur la ligne de commande du débogueur. Par exemple, laissez la vue se charger, puis définissez un point d'arrêt quelque part pendant la durée de vie de votre contrôleur de vue. Alors fais ceci:

call (id)[self setTitle:@"New Title"]

Continuez à exécuter le programme et vous devriez voir la mise à jour du titre de votre contrôleur de vue.

7
n8tr

Pour NSError, j'utilise ceci:

(lldb) expression aTempError = (NSError*)[[NSError alloc] initWithDomain:@"MANO" code:1 userInfo:nil]
2
Ramis

( https://stackoverflow.com/users/1202867/n8tr ) Le commentaire de n8tr ci-dessus montre comment faire. Vous venez de faire précéder votre affectation avec "po" comme suit: po myString = @ "my_new_string" et po self.title = @ "Nouveau titre".

1
Alex Zavatone