2011-11-15 49 views
3

我想打印的堆棧跟蹤我的Objective-C程序Objective-C的 - 命令行(鐺) - 打印堆棧跟蹤

我在命令行中使用鐺編譯(自動引用計數)

我想了解以下內容:

  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 

回答

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); 
} 
+0

謝謝,我有個疑問,在我剛剛在聲明'car1.doors = d1;'時執行的程序中發生了分段錯誤,那麼我怎麼才能知道是什麼導致了分段錯誤。如果在導致分段錯誤的語句之前調用函數'printStackTrace()',那麼跟蹤不會顯示太多,如果我在導致分段錯誤的語句之後調用它,則不會到達那裏。 – user1046037

+1

我想有超過1種方式來做到這一點,下面給出的是顯示一個選項的鏈接:http://stackoverflow.com/questions/8125530/objective-c-arc-nsnumber-segmentation-fault – user1046037