环境: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
关于如何追踪此行为原因的任何想法?
感谢。