【问题标题】:Visual Studio C++ exception... weirdnessVisual Studio C++ 异常...怪异
【发布时间】:2010-02-22 20:23:44
【问题描述】:

我有一个 Qt 应用程序,我在 release 配置中编译、运行,然后在程序中执行 X 操作。一切正常。

然后我在debug配置中编译它,运行不调试(所以CTRL+F5),在程序中执行操作X。一切仍然运行得很好。

但是,当我尝试运行调试配置带调试功能(所以只是 F5)然后执行操作 X 时,Visual Studio 会中断并显示一个异常已引发的消息...... 完全不相关程序的一部分(正在执行的代码远离VS中断的站点,在QHash模板中)......然后VS挂起,我必须用任务管理器杀死它。我可以无限重复这个广告,它总是以同样的方式吓坏。

Boost::exception 用于异常。 VS 是 2008,SP1。 Qt 是 4.6.2,使用来自 Qt 站点的预编译 VS 二进制文件。

有人知道发生了什么吗?

【问题讨论】:

  • 您不会碰巧启用了首次机会异常处理,对吗? (调试 -> 异常;查看是否选中了任何复选框)。
  • 嗯...是的。 “C++ 异常”被选中。删除检查可以解决问题。但我不记得曾经将这些设置为选中。无论如何,您的解决方案有效,现在我觉得自己像个白痴。如果您将评论作为答案,我会将其标记为已接受。
  • 但仍然......在执行代码中没有抛出异常(也没有可能抛出的代码)。
  • "没有任何代码会抛出"你确定吗?
  • 会不会在不同的线程中抛出异常?

标签: c++ visual-studio qt exception boost


【解决方案1】:

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

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

当它中断时,您应该会在“输出”窗口中看到一条消息,指出引发了什么异常。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多