2016-12-13 108 views
3

調試iOS的目標,斯威夫特3時,Xcode 8.2,LLDB-360.1.68斯威夫特3和LLDB:的UIView打印框架,給十六進制地址

我想打印一個UIView的frame其地址在我抓住了一個較早的斷點。這是我最好的一拍,也是令人失望的結果:

(lldb) expr -l objc -O -- NSStringFromRect((CGRect)([(UIView*)0x7a241b30 frame])) 
error: use of undeclared identifier 'CGRect' 

謝謝!

回答

1

我找到了一種答案 - 更確切地說,一個工作免費您無需打印framebounds,因爲它們的值包含在description中。在這種情況下,只要輸入

(lldb) po (UIView*)0x7a241b30 

framebounds值將出現在一片幾百行標準輸出,你會得到。

我仍然會明白爲什麼CGRect的解釋是未聲明的標識符

3

如果您在迅速調試器是您可以使用unsafeBitCast你的指針轉換爲一個類型。

po unsafeBitCast(0x7a241b30, to: UIView.self).frame 
+0

謝謝,@featherless,但這不適用於我。我認爲,* swift調試器*你的意思是lldb。這是發生了什麼: '(LLDB)PO unsafeBitCast(0x7a241b30,至:UIView.self).frame' '錯誤:使用未聲明的標識符「的to'' 雖然出現在unsafeBitCast的使用()根據當前的Swift 3文檔來說是正確的,我嘗試了幾個變體,但仍然在'to'上出現這個錯誤。 –

+0

很不幸! lldb以任何方式自動完成你的工作嗎?你可能與我使用的Swift版本不同。嘗試'unsafeBitCast(0x7a241b30,UIView.self)'。 – featherless

+0

我最近沒有看到lldb自動完成。我剛剛重新測試了全新的版本8.2(8C38)。我使用的是Swift 3.你以前的評論表明我刪除了'to:'和'.frame'。這會導致在'UIView'類型的對象上找不到'error:property'self',這當然更加荒謬。刪除'.self'也會導致'error:unexpected interface name'UIView':expected expression'。啊,我想我現在看到了這個模式。沒有工作:))這是否適合你,如果是的話,你使用的是什麼Xcode和Swift版本? –