为GDB诉LLDB命令中的标准基准是http://lldb.llvm.org/lldb-gdb.html
你想使用的计算表达式expr命令。它是采用“原始输入”除了参数的LLDB命令之一,所以你经常需要用“ - ”表示,其中参数(以表达式)结束和指令(S)开始。例如
(lldb) expr -- [self setAlpha:1]
有一个快捷方式“p”,它为你做了(但不允许任何参数),例如,
(lldb) p [self setAlpha:1]
如果你调用的功能(S)是不是你的计划的一部分,你会经常需要这么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)
有一种整洁的方法来解决浮点参数问题,顺便说一句。创建被添加到您的LLDB输入的每一个表情,与原型的类方法“表达前缀”文件。举例来说,我有一个MyClass类从NSObject的继承,它有两个感兴趣的方法,“setArg:”和“GETARG”,确定,并得到一个浮动伊娃。这是一个愚蠢的小例子,但它显示了如何使用它。下面是我对LLDB写了一个前缀的文件:在我~/.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
你会发现我包括一对夫妇标准的C库函数也在这里。做完这些之后,我不需要再投射这些返回类型,例如
(lldb) p printf("HI\n")
<no result>
HI
(lldb) p strcmp ("HI", "THERE")
(int) $3 = -12
(为 “<没有结果>” 的事情一直致力于LLDB TOT源已修复)
有[在LLDB换GDB-users.txt](http://opensource.apple.com/source/lldb/lldb-69/docs/lldb-for-gdb-users一个例子。txt)for C:'expr(int)printf(“...”)'。也许你应该用'expr(type)'''方法调用前缀? – osgx