xcode中查看方法调用的callstack有三种办法,推荐第2种,下面第四种是对异常的trace,需要时也可以用。
1,alloutput输出窗口输入lldb命令:
bt
据说gdb也是bt命令,bt通用啊,哈哈
2,
NSLog(@"%@",[NSThread callStackSymbols]);
3,加入
#import <execinfo.h>
void PrintBacktrace ( void )
{
void *callstack[128];
int frameCount = backtrace(callstack, 128);
char **frameStrings = backtrace_symbols(callstack, frameCount);
if ( frameStrings != NULL ) {
// Start with frame 1 because frame 0 is PrintBacktrace()
for ( int i = 1; i < frameCount; i++ ) {
printf("%s\n", frameStrings[i]);
}
free(frameStrings);
}
}
4,如果是为了跟踪抛异常时候的callstack,可以把main函数改成下面这样子
#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal;
@try
{
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
}
@catch (NSException *exception) {
NSLog(@"Gosh!!! %@", [exception callStackSymbols]); @throw;
}
@finally
{
[pool release];
}
return retVal;
}