2017-09-14 161 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'' –