2016-09-26 16 views
7

Đây là phần mã tôi nói.clang try catch failed

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

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

Chỉ để tìm chi tiết, tôi đang sử dụng chương trình tăng cường để phân tích cú pháp tệp cấu hình. Một ngoại lệ được nâng lên bằng cách tăng kể từ khi tôi đặt một tùy chọn trong tệp không được công nhận.

Có vấn đề với Clang không bắt ngoại lệ này. Về cơ bản tôi chỉ thấy trong đầu ra

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 

Đây là phiên bản kêu vang của tôi:

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: Khi không có ngoại lệ, các phân tích và tất cả mọi thứ hoạt động tốt.

+2

Bạn có phiên bản tăng cường nào? Có thể bạn có may mắn hơn bằng cách sử dụng catch (std :: exception &) – Trevir

+0

boost 1.55. Mọi thứ được biên dịch với Clang chống lại libC++. và có tôi đã cố gắng nắm bắt (std :: exception &) trước khi gửi câu hỏi nhưng nó đã không hoạt động. –

+1

điều này là phổ biến khi tăng và exe được biên dịch với các thư viện chuẩn khác nhau (tôi biết bạn đã đề cập đến điều này, nhưng kiểm tra lại). –

Trả lời

0

Điều này có thể liên quan đến vấn đề RTTI (Thời gian chạy loại thông tin) tương tự như this issue with GoogleMaps hoặc this question on SO.

Đảm bảo rằng Boost và mã của bạn được biên soạn mà không có cờ fno-rtti.