Answers:
NSLog(@"%@",[NSThread callStackSymbols]);
此代码可在任何线程上运行。
backtrace/backtrace_symbols
直接使用
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);
是否需要实际的例外情况
可可已经将未捕获的异常的堆栈跟踪记录到控制台,尽管它们只是原始内存地址。如果要在控制台中获取符号信息,可以从Apple获得一些示例代码。
如果要在代码中的任意点生成堆栈跟踪(并且您使用的是Leopard),请参见backtrace手册页。在使用Leopard之前,您实际上必须深入研究调用堆栈本身。
这几乎可以告诉您该怎么做。
本质上,您需要设置应用程序异常处理以进行记录,例如:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
对于异常,可以使用异常的userInfo字典的NSStackTraceKey成员来执行此操作。请参阅Apple网站上的控制程序对异常的响应。
backtrace
和backtrace_symbols
功能。请参见backtrace(3)联机帮助页。