2012-02-29 11 views
7

Mi aplicación sigue fallando en un punto. No me diga por qué, el punto de interrupción excepción sucede enBloqueo de la aplicación .... objc_exception_throw

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

así que no tengo idea de lo que está causando el accidente. En el lado izquierdo, me dice que fue por objc_expcetion_throw. ¿Cómo puedo depurar esto? Gracias

+0

Pruebe a depurarlo hasta que llegue a esta línea. Xcode 4.2 tiene un problema de dar excepciones directamente en esa línea de main.m. Sin eso, nadie podrá ayudarte. Y publique un poco más de código. –

+0

Si ejecuta la aplicación sin establecer los puntos de interrupción, debería incluir un rastro de pila y una causa en el registro. – JeremyP

Respuesta

6

En casos como este, crearé un punto de ruptura que rompe todas las excepciones. Este es el punto de interrupción predeterminado que se crea si solo hace clic en el botón Agregar en la pestaña de punto de interrupción.

Con este punto de interrupción, XCode se detendrá en el punto de la excepción y veo la línea de código donde ocurrió junto con la pila.

¡Hubiera publicado una imagen de esto pero no tengo suficientes representantes!

5

Utilice un @try/@catch:

@try { 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
} 
@catch (NSException *ex) 
{ 
    // log ex... 
} 

O puede utilizar el controlador de excepciones:

void uncaughtException(NSException *except) 
{ 
    // log Except 
    NSLog(@"Exception!"); 
} 

NSSetUncaughtExceptionHandler(uncaughtException); 
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

Por último, siempre se puede romper en las excepciones ObjC:

Product->debug->create symbolic breakpoint 
Symbol: objc_exception_throw 
+0

No funciona. Todavía no hay registros, y punto de interrupción en el mismo lugar antiguo :( – 0xSina

+0

@PragmaOnce compruebe mi respuesta actualizada, con 2 nuevos métodos de depuración! –

1

Sigue los consejos y sugerencias de Richard ement el controlador uncaughtException. Establezca un punto de interrupción en el controlador. Cuando los fuegos de excepción, escriba esto en la consola de salida:

po [except callStackSymbols] 

que se debe dar más detalles sobre el origen de la excepción.

Nota: except es el nombre de la variable de excepción que utilizó.

Cuestiones relacionadas