LLDB(Swift):在Xcode 9中将原始内存地址转换为可用类型iOS模拟器/设备
在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应用
感谢您的见解。
您可以创建从你的记忆地址的UnsafeMutablePointer
并使用指针pointee
属性检索对象:
let object = UnsafeMutablePointer<NSTabViewController>(bitPattern: yourMemoryAddress)?.pointee
感谢Palle!我会在某个时候尝试。 –
不幸的是,当调试iOS应用程序时,这种技术对我无效。我得到 '错误:使用未声明的标识符'UnsafeMutablePointer'' –
出于某种原因,昨天的Xcode 9不予配合。调用unsafeBitCast()不起作用!今天,它在iOS 9.x设备,iOS 11模拟器和macOS 10.12.x上调试应用程序时起作用。 与这个问题的区别在于,我在写Xcode 9时遇到了问题,它在Beta中。我引用的这个问题以及一个@matt对这个问题的回答是从Xcode的早期版本开始的。 –
也许我在上面的评论中误解了这个在iOS上的工作。当在Xcode 9的iOS 11模拟器,iOS 9模拟器或iOS 9设备中调试应用程序时,lldb不会调用unsafeBitCast()。 –