2017-09-14 102 views
0

在Xcode 9中調試iOS應用程序時,如何在lldb中投射指向已知Swift對象類型的指針?LLDB(Swift):在Xcode 9中將原始內存地址轉換爲可用類型iOS模擬器/設備

我想在Xcode 9/iOS 11 SDK中給出它的內存地址在Swift中打印對象的描述。我一直在使用這裏描述的技術:LLDB (Swift): Casting Raw Address into Usable Type(注:調試MacOS的應用程序時,這種技術能正常工作。)

(lldb) p unsafeBitCast(0x00006080000e2280, to: UIViewController.self)

但在Xcode 9鍵入LLDB了類似的聲明,同時調試iOS應用程序產生的以下錯誤消息:

error: use of undeclared identifier 'to'。或刪除「至:」部分:

error: use of undeclared identifier 'unsafeBitCast'

我搜索了替換Swift unsafeBitCast()方法的文檔,但是我沒有發現它的廢棄。這是lldb/Swift iOS運行時的錯誤嗎?

斷裂:Xcode的9 + 11的iOS模擬器時,Xcode 9 +的iOS 9.x的模擬器時,Xcode 9 +的iOS 9.x的設備
工作:Xcode的8 + iPhone模擬器/設備時,Xcode 9 + MACOS 10.12應用

感謝您的見解。

+0

出於某種原因,昨天的Xcode 9不予配合。調用unsafeBitCast()不起作用!今天,它在iOS 9.x設備,iOS 11模擬器和macOS 10.12.x上調試應用程序時起作用。 與這個問題的區別在於,我在寫Xcode 9時遇到了問題,它在Beta中。我引用的這個問題以及一個@matt對這個問題的回答是從Xcode的早期版本開始的。 –

+0

也許我在上面的評論中誤解了這個在iOS上的工作。當在Xcode 9的iOS 11模擬器,iOS 9模擬器或iOS 9設備中調試應用程序時,lldb不會調用unsafeBitCast()。 –

回答

1

您可以創建從你的記憶地址的UnsafeMutablePointer並使用指針pointee屬性檢索對象:

let object = UnsafeMutablePointer<NSTabViewController>(bitPattern: yourMemoryAddress)?.pointee 
+0

感謝Palle!我會在某個時候嘗試。 –

+0

不幸的是,當調試iOS應用程序時,這種技術對我無效。我得到 '錯誤:使用未聲明的標識符'UnsafeMutablePointer'' –