In Xcode können Sie mit GDB lokale Variablen während des Debuggens ändern (siehe Ändern des NSString-Werts während des Debuggens in XCode? ). Bietet LLDB eine ähnliche Funktionalität? Wenn ja, wie können wir es verwenden?
In Xcode können Sie mit GDB lokale Variablen während des Debuggens ändern (siehe Ändern des NSString-Werts während des Debuggens in XCode? ). Bietet LLDB eine ähnliche Funktionalität? Wenn ja, wie können wir es verwenden?
Antworten:
expr myString = @"Foo"
(lldb) help expr Evaluiert
einen C / ObjC / C ++ - Ausdruck im aktuellen Programmkontext unter Verwendung der derzeit im Gültigkeitsbereich befindlichen Variablen. Dieser Befehl nimmt 'rohe' Eingaben entgegen (es ist nicht erforderlich, Dinge zu zitieren).Syntax: Ausdruck -
Befehlsoptionen Verwendung: Ausdruck [-f] [-G] [-d] [-u] - Ausdruck [-o] [-d] [-u] - Ausdruck
-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.
Beispiele:
Ausdruck my_struct-> a = my_array [3]
Ausdruck -f bin - (Index * 8) + 5
Ausdruck char c [] = "foo"; c [0]WICHTIGER HINWEIS: Da dieser Befehl 'raw'-Eingaben akzeptiert, müssen Sie bei Verwendung von Befehlsoptionen zwischen dem Ende der Befehlsoptionen und dem Beginn der rohen Eingabe' - 'verwenden.
'Ausdruck' ist eine Abkürzung für 'Ausdruck'
'expr myLabel.text = @"hello!"
aber ich bekomme eine error: property 'text' not found on object of type 'UILabel *'
... Irgendwelche Gedanken?
expr (void)[label setText:@"Foo"]
Sollte es tun. Die Punktsyntax funktioniert normalerweise nicht im Debugger. lldb interpretiert es wahrscheinlich so, als wollten Sie auf ein Mitglied einer c-Struktur zugreifen, aber ich bin mir nicht sicher, ob dies der Grund ist, warum es nicht funktioniert. Die Punktsyntax funktioniert auch nicht po
. stattdessen müssen po label.text
Sie verwendenpo [label text]
@property
.
p
als Verknüpfung für verwenden expr
. Beispiel:(lldb) p url = @"http://google.com"
e
als Verknüpfung für verwenden expr
. Übrigens, p
ist ein Alias für den Druck, der ein Alias für expr --
(nur die Roheingabe auswerten, keine Flags) ist expr -o -- [object]
oder im po
Allgemeinen eine nützlichere Ausgabe für Objekte bietet.
Das folgende Zeug funktioniert für mich. Ich benutze Xcode 8.
Wenn Sie eine Variable (z. B. ein "Diktat") auf Null setzen und dann den Codefluss testen möchten, können Sie Folgendes versuchen.
Es wird ungefähr so aussehen wie in der Konsole.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil