获取 gdb 与 lldb 命令的官方参考文档请查看http://lldb.llvm.org/lldb-gdb.html
你需要使用 expr 命令来评估表达式。它是 lldb 命令之一,除了参数外,它还接受“原始输入”,因此你经常需要使用“--”来指示参数(传递给 expr)的结束和命令的开始,例如:
(lldb) expr -- [self setAlpha:1]
有一个快捷方式 "p",可以为您执行 -- 操作(但不允许使用任何参数),例如:
(lldb) p [self setAlpha:1]
如果你调用的函数不是你的程序的一部分,通常需要显式声明它们的返回类型,以便lldb知道如何调用它们。例如:
(lldb) p printf("hi\n")
error: 'printf' has unknown return type
error: 1 errors parsing expression
(lldb) p (int)printf("hi\n")
(int) $0 = 3
hi
(lldb)
顺便说一下,有一种巧妙的方法可以解决浮点参数问题。你需要创建一个“表达式前缀”文件,该文件将添加到你在lldb中输入的每个表达式中,并带有你的类方法的原型。比如,我有一个从NSObject继承的MyClass类,它有两个有用的方法,“setArg:”和“getArg”,分别用于设置和获取float类型实例变量。这是一个简单的示例,但它展示了如何使用它。以下是我为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 *);
}
我在我的~/.lldbinit
文件中添加了以下内容:
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
“<no result>”的修复已经提交到lldb TOT源代码中了。
expr (int) printf("...")
。也许你应该在方法调用前加上expr(type)
前缀? - osgx