捕获提升序列化存档异常
Catching boost serialisation archive exceptions
我有以下情况。
这是一个代码片段,经过编辑以演示问题。
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 exceptionn");
}
empty_file确实是一个完全空的文件。这应该会导致错误;确实如此。问题是我无法捕获 boost 引发的异常,并滥用用户给我一个空/损坏的文件来加载。
相反,我得到以下内容:
Loading...
terminate called after throwing an instance of 'boost::archive::archive_exception'
what(): invalid signature
Aborted
据我所知,catch(...)应该捕获存在的所有异常。我做错了什么,还是 boost::序列化只是在我有机会做任何事情之前捕获自己的异常并中止()?
如果是后者,那么只是我还是真的糟糕的设计?您的整个程序不应该仅仅因为损坏的加载文件而崩溃(abort()ing)。我能做些什么呢?
也许异常是由构造函数引发的。尝试在try
中构造text_iarchive对象,如下所示:
try {
archive::text_iarchive ia(ifs);
ia >> some_class;
} catch (...) {
ui.display("This should catch every single exceptionn");
}
假设捕获异常,您将希望捕获boost::archive::archive_exception
而不是...
,当然。
尝试检查链接选项。
我有一个类似的问题,catch(...)
write_ini()
boost::property_tree
的异常失败了。我通过删除-static-libgcc
来修复它,或将其与-static-libstdc++
一起使用。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 提升序列化异常错误
- 从 boost::存档:binary_iarchive 反序列化 std::string 时出现错误的分配异常
- 提升序列化在从二进制文件读取时引发异常
- 从提升序列化文件读取会引发异常
- Boost序列化引发std异常
- Boost序列化加载失败并引发异常
- 提升序列化/反序列化存档"stream error"异常
- 捕获提升序列化存档异常