2013-07-15 78 views
2

我是LLDB的新手,嘗試熟悉official website中的那些命令。
我很困惑fr v barp bar的功能。
正如您從網站上看到的,它們被描述爲'顯示局部變量的內容'欄''並放在同一個地方。 但是當我把它們在Xcode 4.6.4中實際使用時,有一些區別嗎?LLDB命令:'fr v var'vs'p var'

(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

的差(我理解)是frame variable僅用於打印變量的 內容,而printexpression --的快捷方式,並且可以評估任意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)用於表達式。 在的情況下,一個變量它們都工作得很好。

+0

因此,'p'的功能覆蓋'fr v'和LLDB創建'fr v'只是爲了使它更清晰和更具體? – kukushi

+0

@nekoP:我已經更新了答案,並試圖更好地解釋它。 –

+0

明白了!謝謝! – kukushi

0

1.在LLDB中,p是print,po是打印對象。 'p'用於打印非指針變量,如bool,float等。 2.'fr v bar'表示顯示局部變量(框架變量)欄的內容。

0

順便說一句,對於gdb愛好者來說,print命令幾乎可以完成gdb print命令所做的一切。 frame variable --no-locals命令相當於gdb的info argsframe variable --no-args等於info locals,而target variableinfo variables的功能。

Jason對歷史記錄是正確的,但這些命令也是有用的,例如,在斷點命令中,您希望在每次停止時打印所有當地人或參數。編寫所有這些打印表達式將是乏味的,但frame var會給你所有的一擊。