当我尝试将异常与Qt一起使用时,应用程序在任何抛出语句上都会立即崩溃,忽略任何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附带的预编译版本;这个应该包括例外。
之后检查了临时代码,预编译器没有对 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(...){ }
它解决了这个问题。 不确定为什么或何时需要此更改,但这可能有助于某人......