我正在研究 LLVM 的 libunwind 库。我想写或看一个直接调用的简单示例
_Unwind_Reason _Unwind_RaiseException( struct _Unwind_Exception *exception_object );
功能。有谁知道是否有使用此功能的示例或可以自己编写一个简单的示例?
有点晚了,但我猜你会喜欢一个指向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,因为它是在语言标准中指定的。