在提升异常

时间:2017-09-13 05:06:32

标签: c++ visual-studio exception boost try-catch

环境:Windows 10,Visual Studio 2015,x64,Unicode,提升1.64

在故意尝试增强异常时,我确定了为什么没有命中catch块的问题。它要让boost告诉我日期的源字符串是否格式错误。

以下是相关代码:

std::string sDate("01/03/2017");    // purposely bad date format, should be 2017/01/03
bool bGoodDate(true);
try
{
    boost::gregorian::date dtTemp(boost::gregorian::from_simple_string(sDate));
}
catch (const std::out_of_range& e)
{
    bGoodDate = false;
}
catch (...)
{
    bGoodDate = false;
}

当此代码位于独立控制台程序中时,它可以正常工作。 out_of_range catch块被命中。但是当相同的代码在使用静态库中的MFC构建的Windows GUI应用程序中时(不确定是否相关),catch块永远不会被命中。相反,我看到GUI应用程序抛出的Unhandled Exception错误中引用了这个boost异常包装器:

Unhandled exception at 0x00007FFC0BC09E08 in Journal.exe: Microsoft C++ exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::gregorian::bad_day_of_month> > at memory location 0x00000078A3DEB100.

我比较了两个项目之间的编译器,调试器和链接器设置,除了GUI项目中第三方库的数量更多以及需要的少量console-vs-gui设置之外,没有任何差异。构建应用程序。

我发现这个看似相关的问题/答案,但我不确定我是如何根据答案找到解决方案的:Weird issue with catching trivial boost exception

关于如何追踪此行为原因的任何想法?

感谢。

0 个答案:

没有答案