2012-05-14 22 views
5

Mi aplicación se bloquea con el siguiente mensaje de error:¿Cómo rastrear la línea que está causando un error de tiempo de ejecución?

'NSInvalidArgumentException', razón: '- [__ NSCFDictionary setObject: forKey:]: intento de insertar un valor nulo (clave: 0)'

y estoy tratando de encontrar dónde está ocurriendo esto en mi código. He configurado NSZombiesEnabled en las variables de entorno, sin embargo, es bastante difícil determinar la ubicación. ¿Alguna idea sobre cómo depurar?

he escrito en BT y esto es lo que veo:

frame #0: 0x30d1832c libsystem_kernel.dylib`__pthread_kill + 8 
    frame #1: 0x3597d20e libsystem_c.dylib`pthread_kill + 54 
    frame #2: 0x3597629e libsystem_c.dylib`abort + 94 
    frame #3: 0x35055f6a libc++abi.dylib`abort_message + 46 
    frame #4: 0x3505334c libc++abi.dylib`_ZL17default_terminatev + 24 
    frame #5: 0x36c38356 libobjc.A.dylib`_objc_terminate + 146 
    frame #6: 0x350533c4 libc++abi.dylib`_ZL19safe_handler_callerPFvvE + 76 
    frame #7: 0x35053450 libc++abi.dylib`std::terminate() + 20 
    frame #8: 0x35054824 libc++abi.dylib`__cxa_rethrow + 88 
    frame #9: 0x36c382a8 libobjc.A.dylib`objc_exception_rethrow + 12 
    frame #10: 0x3428d50c CoreFoundation`CFRunLoopRunSpecific + 404 
    frame #11: 0x3428d36c CoreFoundation`CFRunLoopRunInMode + 104 
    frame #12: 0x3826f438 GraphicsServices`GSEventRunModal + 136 
    frame #13: 0x36d27cd4 UIKit`UIApplicationMain + 1080 
    frame #14: 0x00051cdc AppName`main + 80 at main.m:16 

Respuesta

9

Agregue excepciones como punto de interrupción. Asumiendo Xcode 4 + ...

  1. En la parte superior del marco del navegador (donde ve archivos, etc.), verá un pequeño icono que se parece a una flecha hacia los lados.
  2. Eso mostrará el navegador de punto de interrupción. En la parte inferior de esa vista, haga clic en + para agregar un punto de interrupción.
  3. Haga clic en "Añadir punto de interrupción de excepción ..."

La opción por defecto es probablemente muy bien ... quieres romper con el tiro de todas las excepciones.

Ahora, cuando se ejecuta, obtendrá un punto de interrupción en cualquier lugar donde su aplicación arroje una excepción.

+0

Hola, obtengo la excepción en main. ¿Hay alguna manera de llevarlo a donde sucedió? – Dejell

1

que está ocurriendo el error en sus pruebas? ¿Lo ves desde los registros de bloqueo de iTunes Connect?

Si puede reproducirlo localmente, ejecute el escenario para duplicar el error y cuando el depurador esté activo, escriba "bt" en el indicador (gdb) en la consola para un stacktrace con un número de línea.

1

Trate de añadir esta parte del código en su AppDelegate:

void uncaughtExceptionHandler(NSException *exception); 

void uncaughtExceptionHandler(NSException *exception) { 
    NSLog(@"CRASH: %@", exception); 
    NSLog(@"Stack Trace: %@", [exception callStackSymbols]); 
} 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

// your previous code here 
    return YES; 
} 

La próxima vez que se produce el error, debe tener algunas informaciones adicionales sobre el accidente.

Cuestiones relacionadas