1
我有一些示例代碼不按我認爲應該的方式運行。在Linux中使用objective-c捕獲異常
#import <Foundation/NSString.h>
#import <Foundation/NSException.h>
#import <Foundation/NSAutoreleasePool.h>
#import <stdio.h>
int main(int argc, const char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
@try {
NSException *e = [NSException
exceptionWithName: @"NSException"
reason: @"The level is below 0"
userInfo: nil];
@throw e;
} @catch (NSException *e) {
printf("+%s: ", [[e name] UTF8String]);
}
[pool release];
}
我運行如下:
> gcc -g -c main.m -fconstant-string-class=NSConstantString -I/usr/include/GNUstep
> gcc main.o -lgnustep-base
> ./a.out
結果是:
Aborted
與GNU調試打一點點向我表明的catch子句從未達到。它似乎工作mac雖然。
爲什麼我不進入catch子句?
您可能需要啓動'NSApplication`才能運行Objective-C的東西。 *也許*我的另一個想法是`@ throw`正在向上調用堆棧?嘗試調用「正常」Objective-C異常,如`[[NSArray array] objectAtIndex:-1]`或其他。 – 2011-01-19 15:17:51