Objective-C - Командная строка (лязг) - печать трассировки стека - PullRequest
3 голосов
/ 15 ноября 2011

Я хотел бы напечатать трассировку стека для моей программы Objective-C

Я компилирую из командной строки, используя clang (Автоматический подсчет ссылок)

Я хотел бы знать следующее:

  1. Нужно ли добавлять какие-либо параметры при компиляции?
  2. Нужно ли добавлять какой-либо код, чтобы запустить трассировку и распечатать трассу?

Ниже приведен пример программы, для которой мне нужно распечатать трассировку стека:

#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 Ответ

2 голосов
/ 15 ноября 2011
#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);
}
...