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節に入りませんか?必要
Objective-Cを実行するには、NSApplicationを起動する必要があります。 *多分*私の他の考えは、 '@スローがコールスタックを*上に投げているということです? '[[NSArray array] objectAtIndex:-1]'のような「通常の」Objective-C例外を呼び出してみてください。 –
@cryは@tryに従うと予想されるので、私はcallstackで@tryの上に置くことはできません。 @catch NSArrayを使って '@throw [[NSArray array] objectAtIndex:-1]'を試しましたが、私は同じ結果を得ました。 – Steinbitglis
'' NSApplication'](http://www.cocoadev.com/index.pl?ExceptionHandling)の外で '@ try'が動作しないように見えます。 /developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html#//apple_ref/doc/uid/20000059-BBCHGJIJ)は、プログラムのObjective-C部分内にあるようです、main.mではなく(ほとんど純粋にCです)。 –