kuk*_*shi 4 debugging xcode ios lldb
我是 LLDB 的新手,尝试熟悉官方网站中的这些命令。我对和
的功能感到困惑。
正如您从网站上看到的,它们被描述为“显示局部变量“bar”的内容”并放在同一位置。但是当我在Xcode 4.6.4中实际使用它们时,有一些差异吗?fr v barp bar
(lldb) fr v self
(FGPLoginViewController *const) self = 0x07566350
(lldb) p self
(FGPLoginViewController *) $0 = 0x07566350
(lldb) fr v self.initCount
error: "self" is a pointer and . was used to attempt to access "initCount". Did you mean "self->initCount"?
(lldb) p self.initCount
(NSInteger) $1 = 0
Run Code Online (Sandbox Code Playgroud)
initCount 是 FGPLoginViewController 的 NSInteger 属性。我的问题是和
之间的真正区别是什么?fr v barp bar
区别(据我所知)是仅用于打印变量frame variable的内容,而是 的快捷方式
并且可以评估任意 C 和 Objective-C表达式。printexpression --
在您的示例中,self.initCount是 的属性语法[self initCount]。为了计算该表达式,调试器对其进行编译并在应用程序的上下文中执行代码。
另一个例子:p 2+3计算总和并打印结果,但fr v 2+3给出错误消息。
另一方面,frame variable有更多的选项来显示变量。例如,fr v -r "app.*"显示以“app”开头的所有变量。您无法使用该print命令执行此操作。
总结一下:frame variable是变量,print(或expr) 是表达式。在只有一个变量的情况下,它们的效果同样好。