LLDB命令:'fr v var'vs'p var'

时间:2013-07-15 13:59:50

标签: ios xcode debugging lldb

我是LLDB的新手,并尝试熟悉official website中的这些命令 我对fr v barp 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之间的真正差异是什么?

3 个答案:

答案 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 argsframe variable --no-args等同于info localstarget variable执行info variables所做的操作。

Jason对历史记录是正确的,但是这些命令也很有用,例如,在断点命令中,每次停止时都要打印所有本地或算法。为所有这些写出印刷表达式会很乏味,但是frame var会一举给你所有这些。