你可以利用预编译器编写一个宏来收集所有的值,例如:
#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)
然而,这仅在抛出异常并且在ObjC函数内部时起作用(self和
_cmd
是您在ObjC函数中获得的第一个参数,其中self是指向类的id,
_cmd
是可以(当前!)强制转换为const char的选择器)。
但是,如果您只想针对Foundation异常使用此功能,则有两个选项:
1. 将可能引发异常的所有内容包装在@try() @catch()块中,然后抛出新的自定义异常
2. 获取堆栈跟踪,这可能有点困难,因为您的应用程序可能处于不一致状态,并且无法收集所有值。在
此处详细介绍了获取当前堆栈跟踪的方法。
- (BOOL)application:didFinishLaunchingWithOptions:
ж–№жі•жњ«е°ѕж·»еЉNSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
。然后在AppDelegateдёж·»еЉ дёЉиї°ж–№жі•гЂ‚ - alex