2016-09-26 65 views
7

Burada bahsettiğim kod kısmı.clang try catch başarısız olur

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

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

Ayrıntılar için, bir yapılandırma dosyasını ayrıştırmak için boost program_options kullanıyorum. Tanınmayan bir dosyada bir seçenek koyduğum için bir özel durum destek tarafından yükseltilir.

Bu istisnayı yakalamayan Clang ile ilgili bir sorun var. Temelde sadece çıkış

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 

görmek İşte benim clang sürümü:

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 

DÜZENLEME: istisna olduğunda, ayrıştırma ve her şey çalışıyor.

+2

Hangi yükseltme sürümünüz var? Belki de catch (std :: exception &) – Trevir

+0

boost 1.55 kullanarak daha iyi şansınız olur. Her şey libC++ karşı Clang ile derlenmiştir. ve evet ben soruyu göndermeden önce catch (std :: exception &) çalıştım ama işe yaramadı. –

+1

Bu, destek ve exe farklı standart kitaplıklara karşı derlendiğinde yaygındır (bunu belirttiğinizi biliyorum, ancak tekrar kontrol edin). –

cevap