Я собрал расширение для Ruby в Objective-C. Теперь я хочу использовать @ throw / @ catch и т. Д. Вместо обработки исключений на основе макросов и самостоятельной обработки ошибок.
Я использую среду выполнения GNU, поставляемую с GCC.
Когда я запускаю свое приложение Ruby с моим расширением, оно сбрасывает ядро, как только возникает исключение. Прерывание () происходит из среды выполнения GNU Objective-C (libobjc / exception.c: 375):
void
objc_exception_throw (id value)
{
struct ObjcException *header = calloc (1, sizeof (*header));
header->base.exception_class = __objc_exception_class;
header->base.exception_cleanup = __objc_exception_cleanup;
header->value = value;
#ifdef SJLJ_EXCEPTIONS
_Unwind_SjLj_RaiseException (&header->base);
#else
_Unwind_RaiseException (&header->base);
#endif
/* Some sort of unwinding error. */
abort ();
}
Так как я скомпилировал с -fobjc-exceptions
, я думаю, _Unwind_RaiseException
вызывается.
Есть ли способ использовать исключения Objective-C в расширении Ruby?