使用Qt5在throw语句上即时崩溃

时间:2013-11-17 11:03:57

标签: c++ exception-handling mingw qt5

当我尝试在Qt上使用Exceptions时,应用程序会在任何throw语句上崩溃,忽略任何catch(...) - 子句。这是导致崩溃的最小代码:

#include <QString>

int main ( ) {
    try {
        throw 1;
    } catch (...) {
        QString a;
    }
}

没有QString它就可以正常工作,即使包含了库。

我得到的例外代码是

  

40000015

和偏移量:

  

0000bb3f

我正在使用 QtCreator 2.7.2 Qt 5.1.0 mingw 4.8 (QtCreator附带的版本)。 我使用Windows 8进行构建。

在网上进行一些研究之后,我尝试将CONFIG+=exceptions标志添加到* .pro文件中,但仍然崩溃了。 当我读到Qt可以无异常地构建时(无论这意味着什么)我检查了默认值,因为我正在使用QtCreator附带的预编译版本;这个应该建立包括例外。

我在预编译器之后检查了临时代码,并且预编译器没有为主函数改变任何内容。

当我尝试调试代码时,我注意到它在throw语句之后没有执行任何行,它确实崩溃了。

我还是Qt的初学者;对于这个Qt构建来说这是一个问题吗?我应该换一个新的吗?或者我是否会错过一些我可以改变的配置以使其正常工作?

编辑:弗兰克奥斯特菲尔德邀请我去尝试其他几个课程。以下是我的发现:

  • 按预期工作:
    • std::string
    • QPoint
    • QChar
    • QDate
    • QMessageLogger
  • 崩溃:
    • QString
    • QByteArray
    • QDir
    • QException
    • QFile
    • QRegularExpression
    • QSet<int>
    • QTimer

3 个答案:

答案 0 :(得分:1)

Qt应用程序在任何throw语句上立即崩溃 - 我发现当使用标记-static编译应用程序时会发生这种情况。

QMAKE_LFLAGS *= -static

环境:Qt 5.5.1,mingw 32bit运行时,Windows 8。

答案 1 :(得分:0)

我终于通过重新安装整个计算机解决了这个问题。 无论如何我必须这样做,它在我下载新版QtCreator(3.0.0)时解决了这个问题。

虽然重新安装Qt就足够了。

答案 2 :(得分:0)

我正在使用Qt 5.2.1。

我遇到了一种情况,这种抛出会导致应用程序崩溃(但并非总是如此!):

try{ throw; } catch(...){ }

我用

替换了它
try{ throw 1; } catch(...){ }

它解决了这个问题。不确定为什么或何时需要这种改变,但这可能有助于某人...