2

我是 LLDB 的新手,并尝试在官方网站上熟悉这些命令。
我对fr v barand的功能感到困惑p bar
正如您从网站上看到的,它们被描述为“显示局部变量“bar”的内容”并放在同一个地方。但是当我在Xcode 4.6.4中实际使用它们时,有什么不同吗?

(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

initCount 是 FGPLoginViewController 的 NSInteger 属性。我的问题是和
之间的真正区别是什么?fr v barp bar

4

3 回答 3

4

区别(据我所知)frame variable仅用于打印variables的内容,而它是用于计算任意 C 和 Objective-C表达式print的快捷方式 。expression --

在您的示例中,self.initCount[self initCount]. 为了评估该表达式,调试器对其进行编译并在应用程序的上下文中执行代码。

另一个例子:p 2+3计算总和并打印结果,但fr v 2+3给出错误消息。

另一方面,frame variable有更多选项来显示变量。例如,fr v -r "app.*"显示以“app”开头的所有变量。你不能用print命令做到这一点。

总结一下:frame variable是变量,print(或expr)是表达式。在一个变量的情况下,它们都同样有效。

于 2013-07-15T14:52:59.637 回答
0

1.在LLDB中,p是打印,po是打印对象。'p' 用于打印 bool、float 等非指针变量。 2.'fr v bar' 表示显示局部变量(帧变量) bar 的内容。

于 2013-07-15T14:54:19.160 回答
0

顺便说一句,对于 gdb 爱好者来说,该print命令的作用与 gdbprint命令的作用差不多。该frame variable --no-locals命令等同于 gdb 的info args,frame variable --no-args等同于info locals, 并且target variable做了什么info variables

Jason 对历史的看法是正确的,但这些命令也很有用,例如,在断点命令中,您希望每次停止时都打印所有本地变量或参数。为所有这些编写打印表达式会很乏味,但frame var会一下子给你所有这些。

于 2013-07-18T01:16:12.097 回答