clang尝试捕获失败

时间:2016-09-26 14:34:16

标签: c++ exception-handling clang

以下是我所说的代码部分。

try {
       std::cerr << "first try" << std::endl;
       po::store(po::parse_config_file(ifs, _configFileOptions, false), vm);

} catch(...) {           
       std::cerr << "second try" << std::endl;            
}

为了寻求细节,我使用boost program_options来解析配置文件。由于我在文件中添加了一个无法识别的选项,因此引发了异常。

Clang没有捕获此异常存在问题。基本上我只在输出中看到

first try
libc++abi.dylib: terminating with uncaught exception of type boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::unknown_option> >: unrecognised option 'TestFrequency'
Abort trap: 6

这是我的铿锵版:

c++ --version
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

编辑:当没有异常时,解析和一切正常。

2 个答案:

答案 0 :(得分:0)

这可能与RTTI(运行时类型信息)问题有关,该问题类似于this issue with GoogleMapsthis question on SO

确保在没有fno-rtti标志的情况下编译Boost和您的代码。

答案 1 :(得分:0)

对我来说,解决方案是删除链接器标志“ -Wl,-no_compact_unwind”(Catalina,Apple clang版本11.0.0(clang-1100.0.33.17))