C++ 捕获boost序列化归档异常

C++ 捕获boost序列化归档异常,c++,exception,serialization,boost,archive,C++,Exception,Serialization,Boost,Archive,我有以下情况 这是一段代码片段,经过编辑以演示问题 ifstream ifs("empty_file"); if(!ifs.is_open()) { ui.display("Error: Unable to open file \"empty_file\"\n"); return; } archive::text_iarchive ia(ifs); try { ia >> some_class; } catch (...) { ui.display(

我有以下情况

这是一段代码片段,经过编辑以演示问题

ifstream ifs("empty_file");
if(!ifs.is_open()) {
    ui.display("Error: Unable to open file \"empty_file\"\n");
    return;
}

archive::text_iarchive ia(ifs);
try {
    ia >> some_class;
} catch (...) {
    ui.display("This should catch ever single exception\n");
}
空文件实际上是一个完全空的文件。这会导致错误;确实如此。问题是我无法捕获boost引发的异常,并滥用用户给我一个空/损坏的文件来加载

相反,我得到以下信息:

Loading...
terminate called after throwing an instance of 'boost::archive::archive_exception'
  what():  invalid signature
Aborted
就我所知,catch(…)应该捕获存在的所有异常。我是做错了什么,还是boost::Serialization只是捕获了自己的异常并在我有机会做任何事情之前中止了


如果是后一种情况,那么这只是我还是真的很糟糕的设计?您的整个程序不应该仅仅因为加载文件损坏而崩溃(abort()ing)。我能做些什么呢?

可能是构造函数引发了异常。请尝试在
Try
中构造文本对象,如下所示:

try {
    archive::text_iarchive ia(ifs);
    ia >> some_class;
} catch (...) {
    ui.display("This should catch every single exception\n");
}

假设捕获到异常,您将希望捕获
boost::archive::archive\u异常
,而不是

尝试检查链接选项


我遇到了一个类似的问题,
catch(…)
boost::property_tree
write_ini()
中出现异常时失败。我通过删除
-static libgcc
或将其与
-static libstdc++
一起使用来修复它。

Ahem。我会假装我没那么笨。。。漫不经心地吹口哨。还有,对不起;但是我不能在三分钟内把你的回答记为被接受。编辑:是的,这是我得到的第一个catch语句,但是,正如我在问题中所说的,代码被加工成不臃肿,但仍然显示了我的问题(白痴)。@Tim:我会假装我从未犯过类似的错误;(五)