2

我正在研究 LLVM 的 libunwind 库。我想写或看一个直接调用的简单示例

_Unwind_Reason _Unwind_RaiseException( struct _Unwind_Exception *exception_object );

功能。有谁知道是否有使用此功能的示例或可以自己编写一个简单的示例?

4

1 回答 1

0

有点晚了,但我猜你会喜欢一个指向https://monoinfinito.wordpress.com/series/exception-handling-in-c/的链接,其中还包括__cxa_throw()使用所述函数的实现,这里逐字引用:

void __cxa_throw(void* thrown_exception, struct type_info *tinfo, void (*dest)(void*))
{
    printf("__cxa_throw called\n");

    __cxa_exception *header = ((__cxa_exception *) thrown_exception - 1);
    _Unwind_RaiseException(&header->unwindHeader);

    // __cxa_throw never returns
    printf("no one handled __cxa_throw, terminate!\n");
    exit(0);
}

该函数本身是独立于编译器/C++ 运行时库的 AFAICT,因为它是在语言标准中指定的。

于 2020-11-16T03:24:09.227 回答