我在Windows 7 x64下使用wxWidgets2.8.12和boost :: serialization与mingw4.6和Eclipse CDT Juno编写了一个简单的GUI通讯录程序。
在编码使用boost :: archive :: text_iarchive和text_oarchive将条目序列化到文件/从文件序列化的功能时,我发现该程序在启动时将停止工作。它会简单地开始然后立即终止。 g ++编译得很好,没有写入stdout或stderr。在使用gdb进一步研究这个问题后,我发现升级库确实存在异常。
这本身并不是问题。问题是这个异常从未在Eclipse的任何控制台中显示,所以我甚至不知道它存在直到整个应用程序。异常本身解决起来相当简单,但由于缺乏输出而已经证明是非常有问题的。在Debug和Release配置中构建和运行应用程序时,不会显示任何内容。
我的问题,实质上是这样的:为什么这些库异常没有输出,我需要做些什么才能确保正确显示?经过一段时间的搜索后,我还没有找到任何有用的东西,任何帮助当然都会受到赞赏。提前感谢能够提供帮助的任何人。
答案 0 :(得分:1)
你可以做的一件事,虽然它需要顶层的捕获块或使用set_unexpected()
如下所示。
#include <boost/exception/diagnostic_information.hpp>
...
catch(...)
{
std::cerr << "Unhandled exception!" << std::endl <<
boost::current_exception_diagnostic_information();
return 1; //or whatever...
}
你可以在激烈的catch(...)
之前过滤掉boost / std例外但是你明白了。
编辑:
您可能看不到异常的另一个原因是,在堆栈展开期间是否被调用(由于某种原因) - 然后它将调用terminate
并停止...