问题 什么是异常处理人格功能?


我查看了LLVM EH内在函数的文档,以及Itanium ABI,我对一些事情感到困惑。

什么  一个例外的人格功能?它的表现是什么?我将如何创建一个?


5836
2018-05-16 20:57


起源

personality属性允许函数指定用于异常处理的函数。 llvm.org/docs/LangRef.html#personality-function - ignorer


答案:


我有完全相同的问题。我刚刚找到了 这些文章 它彻底解释了它的工作原理,完整的异常处理过程,包括个性功能的确切目的和逐步实施。

为了在SO上得到答案,这里是一个异常发生时人格行为的简短摘要(但你真的应该看看这个人写的关于这个的18篇文章!):

  • 首先,它将为每个堆栈帧调用一次(查找阶段),并且必须返回一个值(来自枚举)告诉放松,如果当前堆栈帧能够捕获异常。期望个性使用位于函数末尾的一组特定表来获取此信息。

  • 如果堆栈帧可以捕获异常,则将使用不同的第二次调用个性 actions 参数(清理阶段)。


10
2018-05-20 22:12