使用Xcode调试器如何打印出属性的内容?

16
我正在编写一个iOS应用程序,需要使用内置的Xcode调试器。假设我有一个名为HomeViewController的对象,它有三个属性。
@property (nonatomic) BOOL finished;
@property (nonatomic, strong) NSArray *myArray;
@property (nonatomic, strong) NSString *myName;

@synthesize finished = _finished, myArray = _myArray, myName = _myName;
假设我在这个类中有一个断点。如何查看这些属性的内容?我尝试了诸如 po myNameprint myNameprint [self myName] 等方法,但我无法弄清楚如何做到这一点。我已经尝试使用 LLDB,但我一直收到与此人遇到的相同错误(lldb fails to print variable values with "error: reference to 'id' is ambiguous")。对于这个问题的被接受答案是,LLDB 是有问题的,应该使用 GDB;然而,我拒绝接受如此基本的东西是有问题的。

尽管如此,我也尝试使用类似上面的命令来使用 GDB;但是,我也无法让 GDB 工作。请帮忙解决。

2个回答

29

一旦您设置了断点,运行程序并停在断点处,将鼠标悬停在您想要查看的变量/值上,就像这样:

enter image description here

您还可以放置一个NSLog(@"%@", yourLabel.text);来查看该标签/其他对象类型的内容。

另一种选择是像这样在控制台中运行GDB:

gdb
attach <your process name>

接着使用po(print-object)命令来查看变量的值,像这样:

po variableName

要查看原始类型(intfloatlongdoublechar等)的值,只需在控制台中使用print命令运行GDB即可:

print yourPrimitiveVariable

希望这可以帮到您!

编辑:

使用po命令,您可以使用属性名(self.myProperty)或变量名(可能为_myProperty)打印对象的值。 我在这里演示了它:

输入图像描述


那么,如果我使用po命令,我必须打印ivar吗?还是有一种方法可以使用属性名称进行打印?(有时我的属性名称与其对应的变量名称不同) - Nosrettap
@Nosrettap 尝试使用属性名称,如果不起作用,我会尝试找到一种解决方法。 - pasawaya
@Nosrettap - 我测试了 poprint 命令,看起来它们在使用属性名和实例变量名时都能正常工作。请查看我的更新... - pasawaya
2
每当我尝试这样做时,我总是会收到以下错误:error: error: reference to 'id' is ambiguous note: candidate found by name lookup is 'id' note: candidate found by name lookup is 'id' error: 1 errors parsing expression - Nosrettap

4
在调试区域尝试以下表达式以打印对象:
p self.view.bounds.size.width

或使用,

po self.view

p - 打印仅用于打印普通/简单值 而, po - 打印对象与NSLog相同,用于打印对象的值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接