GDB V。lldbコマンドの標準的な参照は、あなたが式を評価exprのコマンドを使用しますhttp://lldb.llvm.org/lldb-gdb.html
です。これは、引数に加えて "生の入力"を取るlldbコマンドの1つで、引数(expr)の終了位置とコマンドの開始位置を示すために " - "が必要なことがよくあります。例えば
(lldb) expr -- [self setAlpha:1]
"p"というショートカットがありますが、あなたのために(ただし引数は許可されません)。
(lldb) p [self setAlpha:1]
あなたが呼んでいる機能(複数可)あなたのプログラムの一部ではない場合、あなたは多くの場合、lldbはそれらを呼び出す方法を知っているので、明示的に戻り値の型を宣言する必要があります。例えば
(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)
浮動小数点引数の問題BTWを回避するには、きちんとした方法があります。 lldbに入力するすべての式に追加される "式プレフィックス"ファイルを作成し、クラスメソッドのプロトタイプを作成します。例えば、私はNSObjectから継承するクラスMyClassを持っていますが、浮動小数点数を設定して取得する2つの関心のあるメソッド "setArg:"と "getArg"があります。これは愚かな小さな例ですが、それを使用する方法を示しています。私~/.lldbinit
ファイルに
@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 *);
}
あなたは私がのカップルを含め気づくでしょう、私は
settings set target.expr-prefix /Users/jason/lldb-prefix.h
を追加し、今私は
(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
を行うことができます。ここで私はlldbのために書いたプレフィックスファイルがあります標準的なCライブラリ関数もここにあります。これを実行した後で、これらのリターンタイプをこれ以上キャストする必要はありません。あなたは複数行が必要な場合は
(lldb) p printf("HI\n")
<no result>
HI
(lldb) p strcmp ("HI", "THERE")
(int) $3 = -12
(。つまり、 "< >なし結果" 事はすでにlldbのTOTソースにコミットされているの修正)
[lldb-for-gdb-users.txt](http://opensource.apple.com/source/lldb/lldb-69/docs/lldb-for-gdb-users)に例があります。txt)をC: 'expr(int)printf(" ... ")'に変換します。メソッド呼び出しの前に 'expr(type)'をつけるべきでしょうか? – osgx