如果投掷块和着陆垫位于不同部分,异常处理是否有效?

问题描述 投票:0回答:1

考虑下面的情况,最终会因开卷机抱怨而崩溃 _URC_END_OF_STACK 并且在 _UA_SEARCH_PHASE 中未找到处理程序

class array{
public: 
 int foo() {
      throw 5;
  }
};

int main() {
  array a0;
  try {
    a0.foo();  
  }
  catch(const int )
  {}
}

对于上述情况,我的链接器将 foo 放入 .text._ZN5array3fooEv 部分,并将其他所有内容放入 .text 部分? llvm ld.lld 则不是这种情况(全部在 .text 中)。

c++ exception stack stack-unwinding uncaughtexceptionhandler
1个回答
0
投票

主 -> .text foo -> .text._ZN5array3fooEv (链接器不合并它们)

答案取决于您的展开库,在这种情况下,mylibUnwind.a 检查 .text 的边界,并且 foo 不在 .text 中,结果是 _URC_END_OF_STACK。

© www.soinside.com 2019 - 2024. All rights reserved.