¿Cómo se lanza un puntero a un tipo de objeto Swift conocido en lldb al depurar una aplicación iOS en Xcode 9?
Estoy tratando de imprimir la descripción de un objeto en Swift dada su dirección de memoria en el SDK de Xcode 9 / iOS 11. Había estado usando la técnica descrita aquí: LLDB (Swift): Convertir la dirección sin formato en un tipo utilizable (Nota: esta técnica funciona bien al depurar una aplicación macOS).
(lldb) p unsafeBitCast(0x00006080000e2280, to: UIViewController.self)
Pero al escribir una declaración similar en lldb en Xcode 9 mientras se depura una aplicación iOS, aparece el siguiente mensaje de error:
error: use of undeclared identifier "to"
. O eliminando la parte "to:":
error: use of undeclared identifier "unsafeBitCast"
.
Busqué la documentación de un reemplazo para el Swift unsafeBitCast()
Método, pero no he encontrado ninguna mención de su desaprobación. ¿Es esto un error en el tiempo de ejecución de lldb / Swift iOS?
Roto: Xcode 9 + iOS 11 Simulator, Xcode 9 + iOS 9.x Simulator, Xcode 9 + iOS 9.x dispositivo
Trabajo: Xcode 8 + iOS Simulator / Device, aplicación Xcode 9 + macOS 10.12
Gracias por sus ideas.
Respuestas
1 para la respuesta № 1Puedes crear un UnsafeMutablePointer
desde su dirección de memoria y recupere el objeto utilizando los punteros pointee
atributo:
let object = UnsafeMutablePointer<NSTabViewController>(bitPattern: yourMemoryAddress)?.pointee