使用 Qt5 的抛出语句时即时崩溃

Instant crash on throw statement with Qt5

本文关键字:崩溃 语句 Qt5 使用      更新时间:2023-10-16

当我尝试将异常与Qt一起使用时,应用程序在任何抛出语句上都会立即崩溃,忽略任何catch(...)-子句。这是导致崩溃的最小代码:

#include <QString>
int main ( ) {
    try {
        throw 1;
    } catch (...) {
        QString a;
    }
}

如果没有QString即使包含库,它也能正常工作。

我得到的异常代码是

40000015

和偏移量:

0000bb3f

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

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

我在预编译器

之后检查了临时代码,预编译器没有对 main 函数进行任何更改。

当我尝试调试代码时,我注意到它在 throw 语句后没有执行任何行,它真的在那里崩溃。

仍然是Qt的初学者;对于Qt来说,这是一个问题吗?我应该买一个更新的吗?还是我错过了一些可以更改以使其正常工作的配置?

编辑:在弗兰克·奥斯特菲尔德(Frank Osterfeld)要求我之后,我尝试了其他几个课程。以下是我的发现:

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

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

QMAKE_LFLAGS *= -static

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

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

不过,重新安装Qt可能就足够了。

我正在使用Qt 5.2.1。

我遇到了这种抛掷会导致应用程序崩溃的情况(但并非总是如此!

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

我把它换成了

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

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