我想在某些点记录调用跟踪,例如失败的断言或未捕获的异常.
NSLog(@"%@",[NSThread callStackSymbols]);
此代码适用于任何线程.
n13的答案并不是很有效 - 我稍微修改了它以得出这个
#import#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; } }
Cocoa已经将未捕获的异常的堆栈跟踪记录到控制台,尽管它们只是原始内存地址.如果您想在控制台中获得符号信息,那么Apple会提供一些示例代码.
如果要在代码中的任意点生成堆栈跟踪(并且您在Leopard上),请参阅backtrace手册页.在Leopard之前,你实际上不得不深入挖掘调用堆栈本身.
这几乎告诉你该怎么做.
基本上,您需要设置应用程序异常处理以进行记录,例如:
#import[[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask: NSLogUncaughtExceptionMask | NSLogUncaughtSystemExceptionMask | NSLogUncaughtRuntimeErrorMask]