web-dev-qa-db-fra.com

Xcode évaluation des expressions lors du débogage

Je travaille sur une application iPhone. Je suis un développeur à plein temps Java et j'ai l'habitude d'utiliser Eclipse où je peux mettre un point d'arrêt et arrêter le processus. Ensuite, je peux taper n'importe quelle expression que je veux et Eclipse le fera l'évaluer en utilisant les valeurs de ce point dans le processus.

Existe-t-il un moyen de le faire dans Xcode? Je veux pouvoir m'arrêter à un point d'arrêt puis entrer un code pour l'évaluer. La console gdb me permettra de faire po ( print-object ), mais c'est vraiment limité. De l'aide?

56
Christopher Martin

Ma pratique:

po [NSUserDefaults standardUserDefaults]

affiche: <NSUserDefaults: 0x6143040>

po [[NSUserDefaults standardUserDefaults] stringForKey:@"Currency"]

affiche: "CHF"

48
Peter

Dans XCode 4.0, cela est en quelque sorte caché dans l'interface graphique. Lorsque vous êtes à un point d'arrêt, vous pouvez probablement voir la vue Variables à l'intérieur de la zone de débogage; c'est le volet qui montre les variables locales et autres. Faites un clic droit sur la vue Variables et sélectionnez "Ajouter une expression ..."

Je me rends compte que c'est un vieux fil, mais c'est toujours un succès de Google, donc j'ai pensé qu'il valait la peine de répondre.

88
Belden Fox

Utilisez la commande "expression" dans le débogueur. Son utilisation est relativement simple. Tapez simplement l'expression de la commande et appuyez sur Entrée. Vous serez ensuite invité à saisir une expression. Voici un exemple

(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
2+2

(int) $2 = 4

J'ai également joint les informations d'aide pour la commande d'expression ci-dessous. J'espère que cela t'aides.

Évaluez une expression C/ObjC/C++ dans le contexte du programme actuel, en utilisant des variables définies par l'utilisateur et des variables actuellement dans la portée. Cette commande prend une entrée "brute" (pas besoin de citer des trucs).

Syntaxe: expression -

Options de commande Utilisation: expression [-f] [-G] [-a] [-d] [-t] [-u] - expression [-o] [-a] [-d] [-t] [- u] - expression

   -G <gdb-format> ( --gdb-format <gdb-format> )
        Specify a format using a GDB format specifier string.

   -a <boolean> ( --all-threads <boolean> )
        Should we run all threads if the execution doesn't complete on one
        thread.

   -d <boolean> ( --dynamic-value <boolean> )
        Upcast the value resulting from the expression to its dynamic type
        if available.

   -f <format> ( --format <format> )
        Specify a format to be used for display.

   -o ( --object-description )
        Print the object description of the value resulting from the
        expression.

   -t <unsigned-integer> ( --timeout <unsigned-integer> )
        Timeout value for running the expression.

   -u <boolean> ( --unwind-on-error <boolean> )
        Clean up program state if the expression causes a crash, breakpoint
        hit or signal.

Délais d'attente: si l'expression peut être évaluée statiquement (sans code d'exécution), elle le sera. Sinon, par défaut, l'expression s'exécutera sur le thread actuel avec un court délai: actuellement 0,25 seconde. S'il ne revient pas dans ce délai, l'évaluation sera interrompue et reprise avec tous les threads en cours d'exécution. Vous pouvez utiliser l'option -a pour désactiver la nouvelle tentative sur tous les threads. Vous pouvez utiliser l'option -t pour définir un délai d'expiration plus court.

Variables définies par l'utilisateur: vous pouvez définir vos propres variables pour plus de commodité ou pour être utilisées dans les expressions suivantes. Vous les définissez de la même manière que vous définiriez des variables en C. Si le premier caractère de votre variable définie par l'utilisateur est un $, alors la valeur de la variable sera disponible dans les expressions futures, sinon elle sera simplement disponible dans l'expression actuelle.

Exemples:

   expr my_struct->a = my_array[3] 
   expr -f bin -- (index * 8) + 5 
   expr unsigned int $foo = 5
   expr char c[] = "foo"; c[0]

REMARQUE IMPORTANTE: étant donné que cette commande prend une entrée "brute", si vous utilisez des options de commande, vous devez utiliser "-" entre la fin des options de commande et le début de l'entrée brute.

14
Jeff Ames

Ne répond pas à la question sur Xcode, mais JetBrains 'AppCode le fait de la manière standard IDE comme la plupart d'entre nous le savent à partir d'autres plateformes.

6
Renetik