使用 Qt5 的抛出语句时即时崩溃
Instant crash on throw statement with Qt5
当我尝试将异常与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(...){ }
它解决了这个问题。 不确定为什么或何时需要此更改,但这可能有助于某人......
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- 程序崩溃并显示"std::out_of_range"错误
- C++ 非 void 函数的崩溃没有返回语句
- C++:添加逻辑上正确的 if 语句会使我的程序崩溃
- C++在try-catch语句处崩溃
- C++-映射迭代器中的if语句导致程序崩溃的原因
- 使用 Qt5 的抛出语句时即时崩溃
- 由于 if 语句,C++ 程序崩溃
- 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 而不返回语句的函数不同
- 为什么我的程序在返回语句时崩溃
- C++ 随机 COUT 语句导致程序在重载的"="运算符内崩溃
- 程序因为if语句而崩溃
- 为什么当我忘记返回语句时,我的c++程序崩溃了,而不是仅仅返回垃圾
- 为什么这个sprint语句崩溃了