我在Objective-C中構建了一個Ruby擴展。現在我想使用@ throw/@ catch等,而不是基於宏的異常處理和自我構建錯誤處理。如何使用新的異常(@ throw ...)使用Objective-C構建Ruby擴展?
我正在使用GCC附帶的GNU運行時。
當我用我的擴展運行我的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
被調用。
有什麼辦法可以在Ruby擴展中使用Objective-C異常嗎?