W Xcode GDB umożliwia zmianę zmiennych lokalnych podczas debugowania (zobacz, jak zmienić wartość NSString podczas debugowania w XCode? ). Czy LLDB oferuje podobną funkcjonalność? Jeśli tak, jak możemy z tego skorzystać?
W Xcode GDB umożliwia zmianę zmiennych lokalnych podczas debugowania (zobacz, jak zmienić wartość NSString podczas debugowania w XCode? ). Czy LLDB oferuje podobną funkcjonalność? Jeśli tak, jak możemy z tego skorzystać?
Odpowiedzi:
expr myString = @"Foo"
(lldb) help expr
Oceń wyrażenie C / ObjC / C ++ w bieżącym kontekście programu, używając zmiennych znajdujących się obecnie w zakresie. To polecenie przyjmuje „surowe” dane wejściowe (nie ma potrzeby cytowania rzeczy).Składnia: wyrażenie -
Użycie opcji polecenia: wyrażenie [-f] [-G] [-d] [-u] - wyrażenie [-o] [-d] [-u] - wyrażenie
-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.
Przykłady:
wyrażenie my_struct-> a = my_array [3]
wyrażenie -f bin - (indeks * 8) + 5
wyrażenie char c [] = "foo"; c [0]WAŻNA UWAGA: Ponieważ polecenie to przyjmuje „surowe” dane wejściowe, jeśli używasz jakichkolwiek opcji poleceń, musisz użyć „-” między końcem opcji polecenia a początkiem surowego wejścia.
„wyrażenie” to skrót od „wyrażenie”
'expr myLabel.text = @"hello!"
ale mam error: property 'text' not found on object of type 'UILabel *'
… Jakieś myśli?
expr (void)[label setText:@"Foo"]
powinien to zrobić. Dot-Syntax zwykle nie działa w debugerze. lldb prawdopodobnie interpretuje to tak, jakbyś chciał uzyskać dostęp do elementu członkowskiego struktury c, ale nie jestem pewien, czy to jest powód, dla którego to nie zadziała. Dot-Syntax nie działa w przypadku po
obu. zamiast tego po label.text
musisz użyćpo [label text]
@property
.
p
jako skrótu do expr
. Przykład:(lldb) p url = @"http://google.com"
e
jako skrótu do expr
. BTW, p
jest aliasem dla print, który jest aliasem dla expr --
(po prostu evalue raw input, no flag) expr -o -- [object]
lub po
generalnie daje bardziej użyteczne wyjście dla obiektów.
Poniższe rzeczy działają dla mnie. Używam Xcode 8.
Jeśli chcesz ustawić jakąś zmienną (na przykład „dict”) na zero, a następnie przetestować przepływ kodu, możesz spróbować wykonać następujące czynności.
Będzie to wyglądało jak w konsoli.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil