2011-11-23 13 views
9

estoy recibiendo el siguiente índice de error de falta de límites:NSRangeException: Pila de llamadas no muestra número de línea

*** Terminating app due to uncaught exception 'NSRangeException', reason: 
'*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' 
*** First throw call stack: 
(0x2263052 0x24c7d0a 0x224fdb8 0x2f4a7 0x2264ec9 0x81e299 0x81e306 0x75aa30 
0x75ac56 0x741384 0x734aa9 0x39a9fa9 0x22371c5 0x219c022 0x219a90a 0x2199db4 
0x2199ccb 0x39a8879 0x39a893e 0x732a9b 0x1e5b 0x1dc5 0x1) 

sé exactamente lo que significa el error, pero me parece que estos errores muy difíciles de solucionar porque por alguna razón la pila de llamadas no me dice la línea de código donde se llamaba la matriz. Aquí está la pila de llamadas a partir de hilos de 1:

#0 0x9706d9c6 in __pthread_kill() 
#1 0x93e2cf78 in pthread_kill() 
#2 0x93e1dbdd in abort() 
#3 0x02859e78 in dyld_stub__Unwind_DeleteException() 
#4 0x0285789e in default_terminate()() 
#5 0x024c7f4b in _objc_terminate() 
#6 0x028578de in safe_handler_caller(void (*)())() 
#7 0x02857946 in __cxa_bad_typeid() 
#8 0x02858b3e in __cxa_current_exception_type() 
#9 0x024c7e49 in objc_exception_rethrow() 
#10 0x02199e10 in CFRunLoopRunSpecific() 
#11 0x02199ccb in CFRunLoopRunInMode() 
#12 0x039a8879 in GSEventRunModal() 
#13 0x039a893e in GSEventRun() 
#14 0x00732a9b in UIApplicationMain() 
#15 0x00001e5b in main 

Como se puede ver esta pila de llamadas no es muy útil, ya que no muestra los métodos de mi código. Además, la pila de llamadas que se muestra en el error tiene 22 direcciones de memoria, mientras que la pila del subproceso 1 solo tiene 15, y las direcciones no coinciden en absoluto. Ningún otro subproceso parece contener información útil.

¿Cómo es posible ver el hilo de la "pila de llamadas de primer lanzamiento" del error (el que tiene 22 direcciones), para que pueda encontrar la línea que causa este error? Tal vez tengo algo configurado incorrectamente en mi configuración de compilación que está causando que la pila relevante no se pueda recuperar.

Si alguien pudiera orientarme en la dirección correcta sobre esto, estaría muy agradecido. Tratar de localizar la línea ofensiva manualmente es bastante tedioso.

Gracias!

Respuesta

17

encienda el depurador y establezca un punto de interrupción cada vez que se produzca una excepción, de esta manera usted sabe exactamente qué línea de código está siendo un imbécil.

objc_exception_throw

Alternativamente, [NSException elevar];

Tener un vistazo a la siguiente pregunta: Add breakpoint to objc-exception-throw

+9

Gracias Antwan, esto funciona a la perfección! Para cualquiera que intente hacer esto en Xcode 4, estos son los pasos que utilicé: 1. En la esquina inferior izquierda del navegador de puntos de interrupción (segunda pestaña de la derecha), haga clic en el botón Agregar ("+"). 2. Elija Agregar punto de interrupción de excepción. 3.Para "Excepción", seleccione "C++" 4. Junto a "nombrado" escriba "objc_exception_rethrow" 5. Haga clic en Listo. – llama591

2

¿Ha habilitado puntos de ruptura a nivel mundial en su proyecto? si no agrega objc_exception_throw a la sección de puntos de interrupción en el navegador del proyecto y luego vuelva a ejecutar la aplicación, debe obtener la pila. Además, cuando ocurra un accidente, mire y expanda cualquier hilo adicional para ver sus pilas también. Me sucedió varias veces que la pila que estaba buscando estaba en un hilo de fondo, aunque el fallo fue informado por el hilo principal. HTH.

0

Suponiendo que esto sucedió mientras estaba en el depurador XCode, puede determinar la línea de código a la que se hace referencia en las direcciones de rastreo. En la ventana de depuración, escriba lo siguiente:

lista de direcciones * de rastreo

Por ejemplo, para su primera entrada, tiene que escribir lo siguiente: lista * 0x2263052

hacer esto para cada dirección . Uno de ellos debe señalar el código de su programa y enumerar el número y el código de la línea que falla arriba y debajo de la línea que falla.

-Steve

Cuestiones relacionadas