【发布时间】:2015-10-09 09:47:22
【问题描述】:
.eh_frame ELF 部分的缺失或损坏是否是导致我的 C++ 代码停止工作的异常原因?之前成功捕获的任何异常现在正在调用 std::terminate()。
我的情况:
-
我的 zzz.so 共享库有 try-catch 块:
try { throw Exc(); } catch (const Exc &e) { LOG("ok " << e.what()); } catch (...) { LOG("all"); } 加载 zzz.so 的可执行文件(使用 ldopen)。它调用 zzz.so 中的一个函数
- 在 zzz.so 中抛出的所有异常都成功地在 zzz.so 中捕获并转储到我的日志文件中
- 还有另一个 aaa.so 被加载到另一个二进制文件中。另一个 aaa.so 正在加载我的 zzz.so。
- 在 zzz.so 中抛出的所有相同异常都会导致调用 std::terminate()。
这怎么可能?
更新
我不知道这怎么可能,但是 Clang 3.3(FreeBSD clang version 3.3 (tags/RELEASE_33/final 183502) 20130610)解决了这个问题。
【问题讨论】:
标签: c++ exception gcc exception-handling elf