2012-04-02 17 views
6

Actualmente estoy escribiendo una aplicación de iOS con Xcode 4.3.2. En la mayoría de las partes de mi código, la depuración con LLDB funciona bien. Sin embargo, en algún momento recibo un mensaje extraño mientras paso por mi código. Cuando el ratón por una Ivar, que diceMensaje de error extraño en Xcode 4.3 con LLDB

Error [IRForTarget]: No se pudo encontrar Objective-C símbolo Ivar indirecta OBJC_IVAR _ $ _ MyFancyClass.iVar

en lugar de mostrarme el valor. Sin embargo, en el Variables View, puedo verlo bien. Hasta que estoy seleccionando Print Description of ... es decir, porque entonces, Xcode falla ... Cuando uso GDB, el movimiento estacionario funciona pero el tipo y los valores de la variable son incorrectos.

Reconocí que hay algo mal con mi código que a su vez hace que los depuradores fallen. Sin embargo, el código funciona bien. Me encantaría proporcionar algún código de muestra, pero la clase es bastante larga y no puedo precisar la ubicación exacta de mi error. Entonces, ¿alguien ha encontrado un comportamiento similar?

ACTUALIZACIÓN: En realidad, parece que esto sucede en todas partes de mi código, no solo en algunos archivos específicos. Si ayuda, mientras LLDB muestra el mensaje anterior, GDB siempre muestra un objeto de la Clase que posee el iVar, en lugar del propio iVar. Parece que hay algún problema con la administración de la memoria. Por ejemplo, si digo algo así como

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA]; 

el selector se activa incluso cuando tengo

[notificationCenter postNotificationName:bar object:objB]; 
+0

Su código puede ser largo, pero no parece que suficientes personas se hayan encontrado con esto. ¿Puedes mostrar una versión resumida de algún código donde ocurre este comportamiento? –

+0

Bueno, como sucede en todas partes en mi Código, realmente no sé lo que podría publicar ... – Phlibbo

+0

Solo estoy adivinando aquí, así que no estoy publicando una respuesta, pero ¿qué pasa si intentas usar el depurador? consola e imprime el objeto usando "po"? Además, ¿tiene algún tipo de configuración de gdb especial en su lugar? ¿Esta es una biblioteca incluida a la que intentas depurar? ¿Está construyendo con la información de depuración habilitada? Comprueba dos veces la configuración de compilación (genera símbolos de depuración, nivel de optimización, formato de información de depuración). –

Respuesta

9

La causa de este error es la configuración de compilación incorrecta, como se indica en la discusión en los comentarios de la pregunta. Esto puede solucionarse configurando "Deptoyment Postprocessing" en NO para Debug-Mode (el valor predeterminado).

2

Asegúrese de que se añade MyFancyClass.m a su destino

+0

Desafortunadamente, ya lo es:/ – Phlibbo

0

Su selector de que el nsnotification se está enviando a necesita tener un argumento (y solo uno), que es una NSNotificación. Así que cuando usted hace esto:

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA]; 

-(void)foo 
{ 

} 

... tienes que estar haciendo esto: [NotificationCenter addObserver: Selector auto: @selector (foo :) Nombre: Objeto de la barra: objA];

-(void)foo:(NSNotification *)notification 
{ 

} 

Observe los dos puntos en el selector para el notificationCenter, y el argumento para foo.

+0

Correcto. Sin embargo, era solo yo, teniendo un error tipográfico en mi pseudo-código. Recuerde, el problema real son las advertencias de depurador extraño :) – Phlibbo

+0

(NSNotification) notificación debe ser (NSNotification *) notificación – braden