我想打印Objective-C程序的堆栈跟踪
我正在使用clang(自动引用计数)从命令行进行编译
我想知道以下内容:
下面给出了一个示例程序,我必须打印堆栈跟踪:
#import<Foundation/Foundation.h>
@interface Car : NSObject
@property (weak) NSNumber* doors;
@end
@implementation Car
@synthesize doors;
@end
int main()
{
system("clear");
Car *car1 = [[Car alloc] init];
NSNumber *d1 = [[NSNumber alloc] initWithInteger: 4];
//I want to start printing the stack trace from this point on
car1.doors = d1;
printf("---- end\n");
return(0);
}
用于编译的命令:
clang -fobjc-arc test.m -framework Foundation -o test
答案 0 :(得分:2)
#include <execinfo.h>
void printStackTrace() {
void *returnAddresses[500];
int depth = backtrace(returnAddresses, sizeof returnAddresses / sizeof *returnAddresses);
printf("stack depth = %d\n", depth);
char **symbols = backtrace_symbols(returnAddresses, depth);
for (int i = 0; i < depth; ++i) {
printf("%s\n", symbols[i]);
}
free(symbols);
}