2
我試圖捕獲由boost::property_tree::xml_parser::read_xml
引發的異常。這裏是我的示例程序:在boost :: property_tree :: read_xml中捕獲異常
#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
int main(int argc, char** argv){
boost::property_tree::ptree pt;
std::cout<<"123123"<<std::endl;
try{
std::cout<<"Reading "<<argv[1]<<std::endl;
read_xml(argv[1], pt);
}
catch(const boost::property_tree::xml_parser::xml_parser_error& ex){
std::cout<<argv[1]<<" failed, reading "<<argv[2]<<std::endl;
read_xml(argv[2], pt);
}
}
輸出是:
123123
Reading 123.xml
[1] 97028 abort ./a.out 123.xml 345.xml
我在做什麼錯?顯然這個例外沒有被捕獲。我也嘗試通過(...)抓住每一件事,並抓住std::exception
以及boost::exception
。在所有情況下,結果都是一樣的。根據boost文檔,應該拋出一個xml_parser_error。我的升級版本是1.54。
一個小更新: 當我不嘗試只是執行read_xml( 「notAValidFilePAth」,PT),然後我得到
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::property_tree::xml_parser::xml_parser_error> >'
what(): 123.xml: cannot open file
當我用gdb運行它,我得到:
Reading terminate called after throwing an instance of
'boost::exception_detail::clone_impl<
boost::exception_detail::error_info_injector<
boost::property_tree::xml_parser::xml_parser_error> >'
what(): PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/MacGPG2/bin:/opt/local/bin:/usr/texbin:/Users/weidenka/bin:
cannot open file
Program received signal SIGABRT, Aborted.
0x00007fff8a31b866 in __pthread_kill()
#0 0x00007fff8a31b866 in __pthread_kill()
#1 0x00007fff86c9f35c in pthread_kill()
#2 0x00007fff86240b1a in abort()
#3 0x00000001005547d5 in __gnu_cxx::__verbose_terminate_handler()
在此先感謝!
最良好的祝願,彼得
這看起來像是崩潰而不是異常。使用調試器並向我們顯示堆棧跟蹤。 – 2014-10-10 13:30:26
如果它崩潰,看起來像庫中的一個bug(禁止任何錯誤的構建w.r.t.庫兼容性) – sehe 2014-10-10 14:01:01