Відповіді:
Відповідь n13 не дуже спрацювала - я трохи змінив її, щоб придумати це
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
int retval;
@try{
retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *exception)
{
NSLog(@"Gosh!!! %@", [exception callStackSymbols]);
@throw;
}
return retval;
}
}
NSLog(@"[Error] - %@ %@", exception.name, exception.reason);
якщо хочете і фактичного винятку
Cocoa вже записує слід стека за невловими винятками з консолі, хоча вони є лише необробленими адресами пам'яті. Якщо ви хочете символічну інформацію в консолі, є якийсь зразок коду від Apple.
Якщо ви хочете генерувати стек стеку у довільній точці коду (і ви перебуваєте на Leopard), перегляньте сторінку "backtrace man". Перед Леопардом ви насправді повинні були перекопати стек викликів.
Це в значній мірі говорить вам, що робити.
По суті, вам потрібно налаштувати обробку виключень додатків для входу в систему, наприклад:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
Для винятку, ви можете використовувати для цього NSStackTraceKey член словника userInfo винятку. Див. Розділ Контроль реакції програми на винятки на веб-сайті Apple.
backtrace
таbacktrace_symbols
; дивіться макетну сторінку (3).