Die kanonische Referenz für GDB v. LLDB Befehle ist http://lldb.llvm.org/lldb-gdb.html
Sie wollen den Befehl expr verwenden, die einen Ausdruck auswertet. Es ist eines der LLDB Befehle, die „raw input“ neben Argumenten übernehmen, so dass Sie oft brauchen „-“, um anzuzeigen, wo die Argumente (bis expr) Ende und der Befehl (n) beginnen. z.B.
(lldb) expr -- [self setAlpha:1]
Es gibt eine Abkürzung, "p", die die - für Sie tut (aber keine Argumente erlaubt), z.
(lldb) p [self setAlpha:1]
Wenn die Funktion (en) Sie ist nicht Teil des Programms anrufen, müssen Sie oft explizit ihren Rückgabetyp erklären, so LLDB weiß, wie sie nennen. z.B.
(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)
Es gibt eine nette Möglichkeit, das Problem mit dem Gleitkomma-Argument zu umgehen, BTW. Sie erstellen eine "Ausdruckspräfix" -Datei, die zu jedem Ausdruck, den Sie in lldb eingeben, mit einem Prototyp Ihrer Klassenmethoden hinzugefügt wird. Zum Beispiel habe ich eine Klasse MyClass, die von NSObject erbt, es hat zwei Methoden von Interesse, "setArg:" und "getArg", die setzen und ein float ivar erhalten. Dies ist ein albernes kleines Beispiel, aber es zeigt, wie man es benutzt. Hier ist eine Präfixdatei ich für LLDB schrieb:
@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 *);
}
in meiner ~/.lldbinit
Datei I
settings set target.expr-prefix /Users/jason/lldb-prefix.h
hinzufügen und jetzt kann ich
(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
Sie werden bemerken, ich eingeschlossen, ein paar Standard-C-Bibliothek funktioniert auch hier. Nachdem ich dies getan habe, muss ich die Rückgabetypen von diesen nicht mehr zaubern, z.
(lldb) p printf("HI\n")
<no result>
HI
(lldb) p strcmp ("HI", "THERE")
(int) $3 = -12
(a. Fix für das "< kein Ergebnis >" Sache bereits an die LLDB TOT Quellen begangen wurde)
Es ist ein Beispiel [in LLDB-for-GDB-users.txt] (http://opensource.apple.com/source/lldb/lldb-69/docs/lldb-for-gdb-users.txt) für C: 'expr (int) printf (" ... ")'. Vielleicht sollten Sie Ihren Methodenaufruf mit 'expr (type)' voranstellen? – osgx