Visual Studio C++ 异常... 奇怪现象

3
我有一个Qt应用程序,在发布配置下编译,运行,然后在程序中执行操作X。一切正常运行。我接着在调试配置下编译,运行(不使用调试,所以CTRL+F5),在程序中执行操作X。仍然一切顺利。但是当我尝试使用调试(所以只需F5)来运行调试配置,然后执行操作X时,Visual Studio会弹出消息说已经抛出了异常……在程序的一个完全无关的部分(正在执行的代码距离VS断点处很远,在QHash模板中)……然后VS挂起,我必须使用任务管理器来结束它。我可以重复这个过程无限次,它总是以同样的方式失控。异常使用Boost::exception。VS是2008,SP1。Qt是4.6.2,使用Qt网站上的预编译VS二进制文件。有人知道发生了什么吗?

3
你是否开启了首次异常处理?(在“调试”->“异常”中看看是否有任何勾选框被选中。) - James McNellis
嗯...是的。已经勾选了"C++异常"。去掉勾选就可以解决问题。但我不记得曾经勾选过这些内容。无论如何,你的解决方案有效,现在我感觉自己像个白痴。如果你把你的评论作为答案,我会标记它为已接受的答案。 - Lucas
但是...在执行代码中仍然没有抛出任何异常(也没有可能抛出异常的代码)。 - Lucas
你确定没有可能会抛出异常的代码吗? - GManNickG
3
那个异常是否可能在另一个线程中抛出? - Nate C-K
显示剩余2条评论
1个回答

4
Visual Studio有一个称为“第一次机会异常处理”的功能,在与调试器连接时,当抛出某些类型的异常时,您可以让调试器中断。

您可以通过转到Debug -> Exceptions(Ctrl + Alt + E)并选中或取消选中相应的复选框来更改这些设置。

当它中断时,您应该在输出窗口中得到一个消息,指示抛出了什么异常。

如果启用了_HAS_ITERATOR_DEBUGGING(在调试版本中默认启用),它可能会导致许多迭代器错误抛出异常,而不是执行会导致访问冲突的操作。那是我能想到的唯一会导致异常“随机”发生的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接