error lldb: variable no disponible


Aquí están mis dos líneas de código:

NSString *frontFilePath = [[NSBundle mainBundle] pathForResource:[self.bookendFileNames objectAtIndex:self.randomIndex] ofType:@"caf"];
NSLog(@"frontFilePath = %@", frontFilePath );

Pongo un punto de interrupción en la segunda línea y cuando está allí, trato de imprimirlo:

(lldb) po frontFilePath

Pero obtengo el siguiente error:

error: variable not available

Estoy confundido porque si paso por encima de la instrucción NSLog, la variable se imprime en la consola.

Por si sirve de algo, estoy tratando de depurar la primera línea ya que a veces devuelve NULL, aunque no puedo, a partir de ahora, averiguar por qué.

Author: ari gold, 2012-10-24

1 answers

Este es un artefacto de depuración de código optimizado. Cuando la optimización del compilador está habilitada en la configuración de compilación, mueve las variables entre la memoria y los registros a medida que decide que es mejor. En el punto en el que está examinando la variable en lldb, puede que no exista en los registros o en la memoria en absoluto, aunque parece que todavía debería estar disponible para su visualización.

Es posible que sea una deficiencia de la salida de información de depuración del compilador. A veces el compilador copie una variable en un registro para su uso y solo enumere la ubicación de registro en la información de depuración. Más tarde, el registro se reutiliza para otros usos; el valor todavía está presente en la pila, pero el compilador no le ha dicho al depurador que el valor se puede encontrar allí.

La única manera de saber realmente si es información de depuración insuficiente o si el valor realmente no existe en esa instrucción en particular es examinar el código ensamblador a mano. Tan pronto como active la optimización con el compilador, el código fuente se convierte en una vista débil de lo que realmente se está ejecutando en un orden particular.

En lugar de vagar demasiado lejos en el mundo loco de la depuración de código optimizado, recomiendo encarecidamente desactivar la optimización (Nivel de optimización en la configuración de Compilación) para su compilación y depurarla de esa manera, si es posible. Si necesita depurar su aplicación con optimización, asegúrese de que está creando con el último compilador LLVM de Apple compatible con su Xcode -- siempre se está trabajando para mejorar la depuración de código optimizado y desea aprovechar las herramientas más actualizadas que pueda.

 40
Author: Jason Molenda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-24 02:17:28