当我尝试在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
答案 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(...){ }
它解决了这个问题。不确定为什么或何时需要这种改变,但这可能有助于某人...