1

我一直在 Windows 7 x64 下编写一个简单的 GUI 地址簿程序,使用 wxWidgets2.8.12 和 boost::serialization 以及 mingw4.6 和 Eclipse CDT Juno。

在使用 boost::archive::text_iarchive 和 text_oarchive 对文件中的条目进行序列化的功能时,我发现该程序将在启动时停止工作。它会简单地启动然后立即终止。g++ 编译得很好,没有任何东西写入标准输出或标准错误。在使用 gdb 进一步调查该问题后,我发现 boost 库确实引发了异常。

这本身不是问题。问题是这个异常从未显示在任何 Eclipse 的控制台中,所以我什至不知道它存在,直到单步执行整个应用程序。异常本身很容易解决,但由于缺乏输出而被证明是非常有问题的。在调试和发布配置中构建和运行应用程序时没有显示任何内容。

我的问题本质上是这样的:为什么这些库异常没有被输出,我需要做些什么来确保它们的正确显示?经过一段时间的搜索,我还没有找到任何有用的东西,当然,我们将不胜感激。提前感谢任何能够提供帮助的人。

4

1 回答 1

1

好吧,您可以做一件事,尽管它需要在顶层使用 catch 块或使用set_unexpected()类似于以下内容。

#include <boost/exception/diagnostic_information.hpp>

...

catch(...)
{
    std::cerr << "Unhandled exception!" << std::endl <<
    boost::current_exception_diagnostic_information();
    return 1; //or whatever...
}

您当然可以在激烈之前过滤掉 boost/std 异常,catch(...)但您明白了。

编辑:

您可能看不到异常的另一个原因是,如果在堆栈展开期间(出于某种原因)调用它 - 然后它会调用terminate并停止死......

于 2013-01-13T19:36:05.047 回答