Перехват исключений с помощью target-c в Linux - PullRequest
1 голос
/ 19 января 2011

У меня есть пример кода, который работает не так, как я думаю.

#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?

1 Ответ

3 голосов
/ 20 января 2011

Необходимые ответы можно найти в этой почтовой ветке: http://www.mail-archive.com/discuss-gnustep@gnu.org/msg11979.html

Чтобы получить правильную цель-c обработка исключений, возможно, потребуется скомпилировать с флагом -fobjc-exceptions.

> gcc -g -c main.m -fconstant-string-class=NSConstantString -fobjc-exceptions -I/usr/include/GNUstep
> gcc main.o -lgnustep-base
> ./a.out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...