C++ 异常原理:以一个小程序为例
出处:
mp.weixin.qq.com
作者:
石超
最近我们在调查某个 bug 涉及到 C++ 异常。平时较少用 C++ 异常,借此机会把 C++ 异常机制梳理清楚。互联网上现有的资料不多,大多过于深奥。因此写下这篇文档备忘。 C++ 异常的实现机制有 SJLJ、Dwarf CFI、EHABI。具体选择哪种实现和操作系统及体系结构相关。它是 C++ ABI 的一部分。这里我们仅关注 Dwarf CFI,它是 Linux 在 x86_64 和 arm64 上的默认实现。 完整的 C++ 异常机制需要编译器生成的代码、C++ 运行时(libstdc++ 或 libc++)、unwind 库分工协作完成。本文为了描述浅显易懂,并不区分它们三者。