Kanoniczna odniesienie do poleceń lldb gdb v. Jest http://lldb.llvm.org/lldb-gdb.html
Chcesz użyć polecenia expr rozpoznawaną wyrażenia. Jest to jedno z poleceń lldb, które oprócz argumentów pobiera "surowe dane wejściowe", więc często potrzebujesz "-", aby wskazać, gdzie kończą się argumenty (do expr) i zaczynają się polecenia. na przykład
(lldb) expr -- [self setAlpha:1]
Istnieje skrót "p", który wykonuje - dla Ciebie (ale nie pozwala na żadne argumenty), np.
(lldb) p [self setAlpha:1]
Jeśli funkcja (e) dzwonisz nie są częścią programu, będziesz często trzeba jawnie zadeklarować typ zwracany tak lldb wie, jak je nazwać. na przykład
(lldb) p printf("hi\n")
error: 'printf' has unknown return type; cast the call to its declared return type
error: 1 errors parsing expression
(lldb) p (int)printf("hi\n")
(int) $0 = 3
hi
(lldb)
Istnieje prosty sposób na obejście problemu z argumentem zmiennoprzecinkowym, BTW. Tworzysz plik "prefiks wyrażeń", który jest dodawany do każdego wyrażenia wprowadzonego w lldb, wraz z prototypem twoich metod klasy. Na przykład, mam klasę MyClass, która dziedziczy po NSObject, ma dwie interesujące metody: "setArg:" i "getArg", które ustawiają i otrzymują float ivar. To jest głupi mały przykład, ale pokazuje, jak z niego korzystać. Oto plik prefix pisałem dla lldb:
@interface NSObject
@end
@interface MyClass : NSObject
- init;
- setArg: (float)arg;
- (float) getArg;
@end
extern "C" {
int strcmp (const char *, const char *);
int printf(const char * __restrict, ...);
void puts (const char *);
}
w moim pliku ~/.lldbinit
dodam
settings set target.expr-prefix /Users/jason/lldb-prefix.h
i teraz mogę zrobić
(lldb) p [var getArg]
(float) $0 = 0.5
(lldb) p [var setArg:0.7]
(id) $1 = 0x0000000100104740
(lldb) p [var getArg]
(float) $2 = 0.7
Zauważysz włączyłem parę standardowe funkcje biblioteki C tutaj. Po wykonaniu tej czynności nie muszę już przesyłać typów zwracanych, np.
(lldb) p printf("HI\n")
<no result>
HI
(lldb) p strcmp ("HI", "THERE")
(int) $3 = -12
(. Poprawka do tego "< bez rezultatu >" sprawa została zaangażowana do źródeł lldb TOT już)
Istnieje przykład [w lldb-for-gdb-users.txt] (http://opensource.apple.com/source/lldb/lldb-69/docs/lldb-for-gdb-users.txt) dla C: 'expr (int) printf (" ... ")'. Może powinieneś poprzedzić inwokację metody za pomocą 'wyraż (typ)'? – osgx