c++ - 使用 Qt5 的 throw 语句即时崩溃

标签 c++ exception-handling mingw qt5

当我尝试在 Qt 中使用异常时,应用程序在任何 throw 语句上立即崩溃,忽略任何 catch(...) -条款。这是导致崩溃的最少代码:

#include <QString>

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

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

我得到的异常代码是

40000015

和偏移量:

0000bb3f

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

在网络上进行一些研究后,我尝试添加 CONFIG+=exceptions标记到 *.pro 文件,但仍然崩溃。 当我读到 Qt 可以毫无异常(exception)地构建时(不管那是什么意思),我检查了默认值,因为我使用的是 QtCreator 附带的预编译版本;这个应该包括异常(exception)情况。

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

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

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

编辑:在 Frank Osterfeld 要求我之后,我尝试了其他几个类(class)。以下是我的发现:

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

最佳答案

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

QMAKE_LFLAGS *= -static

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

关于c++ - 使用 Qt5 的 throw 语句即时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029895/

相关文章:

c# - 映射到具有内部构造函数的自定义类型

c++ - eclipse CDT : error: '::wcstold' has not been declared using MinGW

c++ - QtQuick 2.1 从 TextInput 获取文本

c++ - 如何编写C++模板函数在内部调用多个C函数?

c# - Visual Studio 2015 意外中断已处理的异常

C# try-catch-else

c++ - Mingw-w64 - printf 不起作用

c - 使用 gcc 4.8.1 和 Mingw gcc 4.7.2 进行字符串操作

c++ foreach循环使用指针而不是引用

c++ - 从派生类中的模板化基类使用 typedef/using