2016-09-26 2 views
7

ここに私が話すコードの部分があります。clang try catchが失敗する

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

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

詳細を調べるために、私は設定ファイルを解析するためにprogram_optionsを使用しています。ブーストによって例外が発生するのは、認識できないファイルにオプションを入れるからです。

Clangがこの例外をキャッチしないという問題があります。

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 

はEDIT:例外が存在しない場合には、構文解析とすべてが正常に動作します。基本的に私はここでしか

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 

は私の打ち鳴らすのバージョンである出力で見ます

+2

あなたはどのバージョンのブーストをお持ちですか?たぶんあなたはcatch(std :: exception&) – Trevir

+0

boost 1.55を使ってより良い運があります。すべてがlibC++に対するClangでコンパイルされています。はい、私はキャッチしようとしましたが(std :: exception&)質問を提出する前に、それは動作しませんでした。 –

+1

これはboostとexeが異なる標準ライブラリに対してコンパイルされているときによく見られます(私があなたがこれを言及したことを知っていますが、もう一度チェックします)。 –

答えて

0

これは、this issue with GoogleMapsまたはthis question on SOに似ているRTTI(実行時タイプ情報)の問題に関連する可能性があります。

ブーストとコードがfno-rttiフラグなしでコンパイルされていることを確認してください。