Dans Xcode, GDB vous permet de changer les variables locales pendant le débogage (voir comment changer la valeur de NSString pendant le débogage dans XCode? ). LLDB offre-t-il une fonctionnalité similaire? Si oui, comment pouvons-nous l'utiliser?
Dans Xcode, GDB vous permet de changer les variables locales pendant le débogage (voir comment changer la valeur de NSString pendant le débogage dans XCode? ). LLDB offre-t-il une fonctionnalité similaire? Si oui, comment pouvons-nous l'utiliser?
Réponses:
expr myString = @"Foo"
(lldb) help expr
Évalue une expression C / ObjC / C ++ dans le contexte actuel du programme, en utilisant les variables actuellement dans la portée. Cette commande prend une entrée «brute» (pas besoin de citer des éléments).Syntaxe: expression -
Utilisation des options de commande: expression [-f] [-G] [-d] [-u] - expression [-o] [-d] [-u] - expression
-G <gdb-format> ( --gdb-format <gdb-format> ) Specify a format using a GDB format specifier string. -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. -u <boolean> ( --unwind-on-error <boolean> ) Clean up program state if the expression causes a crash, breakpoint hit or signal.
Exemples:
expr ma_structure-> a = mon_array [3]
expr -f bin - (index * 8) + 5
expr char c [] = "toto"; 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.
'expr' est une abréviation pour 'expression'
'expr myLabel.text = @"hello!"
mais j'obtiens un error: property 'text' not found on object of type 'UILabel *'
... Des pensées?
expr (void)[label setText:@"Foo"]
devrait le faire. Dot-Syntax ne fonctionnera généralement pas dans le débogueur. lldb l'interprète probablement comme vous vouliez accéder à un membre d'un c-struct, mais je ne suis pas sûr que ce soit la raison pour laquelle cela ne fonctionnera pas. Dot-Syntax ne fonctionne pas non po
plus. au lieu de po label.text
vous devez utiliserpo [label text]
@property
.
p
comme raccourci pour expr
. Exemple:(lldb) p url = @"http://google.com"
e
comme raccourci pour expr
. BTW, p
est un alias pour print qui est un alias pour expr --
(juste évaluer l'entrée brute, pas de drapeaux) expr -o -- [object]
ou po
qui vous donne généralement une sortie plus utile pour les objets.
Les trucs suivants fonctionnent pour moi. J'utilise Xcode 8.
Si vous souhaitez définir une variable (par exemple un "dict") sur nil, puis tester le flux de code, vous pouvez essayer ce qui suit.
Cela ressemblera à quelque chose comme dans la console.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil