Objective-C - 命令行(clang) - 打印堆栈跟踪

时间:2011-11-15 07:33:36

标签: objective-c command-line stack-trace clang

我想打印Objective-C程序的堆栈跟踪

我正在使用clang(自动引用计数)从命令行进行编译

我想知道以下内容:

  1. 编译时是否需要添加任何参数?
  2. 我是否必须添加任何代码才能启动跟踪并打印跟踪?
  3. 下面给出了一个示例程序,我必须打印堆栈跟踪:

    #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
    

1 个答案:

答案 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);
}