我查看了 LLVM EH 内在函数以及 Itanium ABI 的文档,但我对一些事情感到困惑。
什么是异常人格函数?它执行什么工作?我将如何创建一个?
我有完全相同的问题。我刚刚发现这些文章彻底解释了它的工作原理,完整的异常处理过程,包括个性功能的确切目的和逐步实现。
为了对 SO 有答案,这里简要总结一下异常发生时的人格行为(但你真的应该看看这个家伙写的18 22 篇文章!):
首先,它将为每个堆栈帧(查找阶段)调用一次,并且必须返回一个值(来自枚举)告诉展开当前堆栈帧是否能够捕获异常。预计个性将使用位于函数末尾的一组特定表来获取此信息。
如果堆栈帧可以捕获异常,则将使用不同的actions
参数(清理阶段)再次调用个性。