Usted puede hacer que las ventajas de la precompilador y escribir una macro que reúne todos los valores, por ejemplo:
#define __ThrowException(name, reason, class, function, file, line, info) [NSException exceptionWithName:name reason:[NSString stringWithFormat:@"%s:%i (%@:%s) %@", file, line, class, function, reason] userInfo:info];
#define ThrowException(name, reason, info) __ThrowException(name, reason, [self class], _cmd, __FILE__, __LINE__, info)
Sin embargo, esto sólo funciona cuando se lanza una excepción y desde dentro de una función ObjC (self y _cmd
son los primeros parámetros que obtienes en una función ObjC, donde self es una identificación que apunta a la clase y _cmd
al selector que puede estar (actualmente!) encasillado en const char).
Sin embargo, si desea que esta sólo para excepciones de la Fundación, tiene dos opciones:
- Wrap todo lo que podría lanzar una excepción en @try() @catch() bloques y luego lanzar una nueva, la costumbre , excepción
- Obtener el seguimiento de pila, esto es lo que podría ser un poco más difícil ya que su aplicación es posible en un estado incoherente y no puede reunir todos los valores. La recopilación de la traza actual de la pila está cubierta con gran detalle en here.
¿dónde colocas este método? ¿está en el delegado de la aplicación? Aparece una advertencia que indica que no hay un prototipo anterior para este método. – TommyG
@TommyG Agregue 'NSSetUncaughtExceptionHandler (& uncaughtExceptionHandler);' al final de su aplicación '- (BOOL): didFinishLaunchingWithOptions:' en AppDelegate. A continuación, agregue el método anterior a AppDelegate también. – alex
¿Esto realmente le da un rastro de pila? – jjxtra