我是LLDB的新手,并尝试熟悉official website中的这些命令
我对fr v bar
和p 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 bar
和p bar
之间的真正差异是什么?
答案 0 :(得分:3)
差异(据我所知)是frame variable
仅用于打印
变量的内容,而print
是其中的快捷方式
expression --
并且可以评估任意C和Objective-C 表达式。
在您的示例中,self.initCount
是[self initCount]
的属性语法。为了评估该表达式,调试器将其编译并在该上下文中执行代码
应用。
另一个例子:p 2+3
计算总和并打印结果,但fr v 2+3
给出
错误信息。
另一方面,frame variable
有更多选项来显示变量。
例如,fr v -r "app.*"
显示以“app”开头的所有变量。你不能这样做
使用print
命令。
总结一下:frame variable
用于变量,print
(或expr
)用于表达式。
在一个变量的情况下,它们都同样有效。
答案 1 :(得分:0)
1.在LLDB中,p是打印,po是打印对象。 'p'用于打印非指针变量,如bool,float等。 2.'fr v bar'表示显示局部变量(帧变量)条的内容。
答案 2 :(得分:0)
BTW,对于那里的gdb爱好者来说,print
命令几乎与gdb print
命令的作用相同。 frame variable --no-locals
命令等同于gdb的info args
,frame variable --no-args
等同于info locals
,target variable
执行info variables
所做的操作。
Jason对历史记录是正确的,但是这些命令也很有用,例如,在断点命令中,每次停止时都要打印所有本地或算法。为所有这些写出印刷表达式会很乏味,但是frame var
会一举给你所有这些。