什么是第一次机会异常?

时间:2014-02-26 10:04:08

标签: visual-studio-2010 visual-studio

我收到First-chance exception at 0x75FA2EEC in x.exe: Microsoft C++ exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::property_tree::ptree_bad_path> > at memory location 0x006AE774

在我的代码中,我以为我已经处理过它们了:

const ptree& v;
std::string value;
try { value = v.get<std::string>("<xmlattr>.Value"); }
catch(ptree_bad_path&) { value = v.get_value<std::string>(); }

(根据docs。)

那么为什么我会收到错误?

似乎只是忽略了错误然后继续执行。

1 个答案:

答案 0 :(得分:5)

  

那么为什么我会收到错误?

这不是错误,它只是一个调试器通知。有几个,例如,当线程退出或DLL加载或程序终止时,您也会看到通知。这些是程序中通常会对程序产生很大影响的事件,C ++异常是一个特殊事件,因此调试器会让您知道这一点。

“第一次机会”异常不必变成中止您的程序的未处理异常。它没有,你在代码中编写了try / catch并捕获了异常。仍然很高兴知道这一点,也许你的捕获处理被打破,你的程序行为不端。它通常是因为异常应该是例外的,所以不要经常进行测试。您可以使用Debug + Exceptions执行此操作,勾选C ++异常的Thrown复选框。调试器现在会在第一次机会异常通知时自动中断程序,让您快速找到抛出异常的原因。非常有用。

您不必查看这些通知,右键单击“输出”窗口并取消选中“异常消息”选项。

功能,而不是错误。