“catch”无法从库中捕获异常

"catch" can't catch exception from library

提问人:Arkady 提问时间:5/14/2018 最后编辑:Arkady 更新时间:2/27/2019 访问量:680

问:

我在库中有这个方法:

#include <stdexcept>

mytype* myfunc()
{
  throw std::runtime_error("is uncatchable");
}

这在链接库的可执行进程中。int main()

  try {  myfunc(); }
  catch(std::exception const& ex) { std::cout << "handled: " << ex.what() << std::endl;  }
  catch(...) {   std::cout << "something else..." << std::endl;  }

这就是输出:

terminate called after throwing an instance of 'std::runtime_error'
  what(): is uncatchable
Abort (core dumped)

问题: 为什么没有发现异常?

我没有管理编译器的标志(icc-11。X),操作系统也不在我的控制之下。

编译器标志列表:

-DLINUX -DLINUX_X64 -DGNU_SOURCE -fPIC -Wcheck -Wshadow -Wdeprecated -Wreturn-type -Wcomment -Wmissing-prototypes -Wp64 -Drcsid="__attribute__((used)) rcsid" 
-D__EXTENSIONS__ -D__STD_C__ -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -DNDEBUG  

__EXCEPTIONS已定义。

Linux 是否存在导致这种情况的设置?

是否存在导致这种情况的编译器设置?

C++ Linux 异常

评论

0赞 Killzone Kid 5/14/2018
在这里工作正常
0赞 hlt 5/14/2018
FWIW GCC 和 Clang 工作得很好 - 可能是 ICC 错误?
0赞 Arkady 5/14/2018
当然,在通常情况下它应该可以正常工作。我认为它可能与某些操作系统设置或某些特定的编译器设置有关,如果存在的话。
3赞 Marek R 5/14/2018
IMO 问题是库如何与应用程序链接(因此问题无法用在线编译器重现)。由于某种原因,库和应用程序之间不共享库,这可能会混淆 RTTI。请提供有关构建过程的详细信息。STL
1赞 UKMonkey 5/14/2018
编译时是否定义了__EXCEPTIONS?software.intel.com/sites/default/files/m/d/4/1/d/8/icc.txt 指出 -fnoexceptions 将具有未定义的;因为也许有一些配置文件它从中获取了该标志?

答: 暂无答案